Индикатор уровней (помогите написать)

S

sokrat

Guest
NinjaTrader
  • #1
Добрый день! Речь пойдет о самописном индикаторе уровней, который берёт уровни с дневной свечи. Подскажите пожалуйста, возможно ли из МТ4 перенести такой индикатор в Нинзю Трейдер?
Те, кто готов написать/перенести индикатор уровней в нинзю Трейдер, стучите в скайп "suall546" . За вознаграждение соответственно.
Есть ли аналоги индикаторов уровней в Нинзя Трейдер?
Посмотреть бы типовую конструкцию кода типовых индикаторов уровней на Нинзя Трейдер. Насколько я понимаю, то конструкция кода должна быть типовая с тем отличием, что формула расчета и построения уровней будет отличаться.
 
  • #2
а какой типовой индикатор в мт4 по построению уровней??? я думаю тут все что выдумаете то и можете ПЫТАТЬСЯ реализовать. Хотите посмотреть типовые индикаторы, то в нт7 или нт8 есть они, устанавливайте платформу, открывайте редактор скриптом и код перед вами.
Насчет помогите написать, я бы и сам не против чтобы помогли. Поэтому если начнешь, то думаю к тебе присоединятся.
 
Последнее редактирование:
  • Like
Реакции: Alexander
  • #3
Вот код индикатора уровней MQL4 . Индикатор очень простой: он на 5-минутных графиках строит горизонтальные уровни - линии. К цене открытия текущего дня прибавляется % от (High-Low) предыдущего дня. Помогите перевести этот код в Нинзю Трейдер.
Код:
#property copyright "Copyright 2015"
#property link "..."
#property version "1.00"
#property strict
#property indicator_chart_window

#property description "Индикатор диапазонов"
#property description "относительно предыдущего дня"

#property indicator_buffers 6 //сколько будет изображено линий
#property indicator_color1 clrLimeGreen
#property indicator_width1 2
#property indicator_color2 clrGreen
#property indicator_width2 2
#property indicator_color3 clrRed
#property indicator_width3 2
#property indicator_color4 clrMaroon
#property indicator_width4 2
#property indicator_color5 clrDarkViolet
#property indicator_width5 2
#property indicator_color6 clrBlue
#property indicator_width6 2

//параметры - после слешей - название индикатора для пользователей
input ENUM_TIMEFRAMES UpTime = PERIOD_D1;
input double Range1Percent = 20;
input double Range2Percent = 40;
input double Range3Percent = 60;

//буфферы
double bufUp1[];
double bufDown1[];
double bufUp2[];
double bufDown2[];
double bufUp3[];
double bufDown3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
IndicatorShortName("dzRanges");
IndicatorBuffers(6);

//задаем привязку и стили
SetIndexBuffer(0, bufUp1);
SetIndexStyle(0, DRAW_LINE);
SetIndexShift(0, 0);
SetIndexDrawBegin(0, 0);

SetIndexBuffer(1, bufDown1);
SetIndexStyle(1, DRAW_LINE);
SetIndexShift(1, 0);
SetIndexDrawBegin(1, 0);

SetIndexBuffer(2, bufUp2);
SetIndexStyle(2, DRAW_LINE);
SetIndexShift(2, 0);
SetIndexDrawBegin(2, 0);

SetIndexBuffer(3, bufDown2);
SetIndexStyle(3, DRAW_LINE);
SetIndexShift(3, 0);
SetIndexDrawBegin(3, 0);

SetIndexBuffer(4, bufUp3);
SetIndexStyle(4, DRAW_LINE);
SetIndexShift(4, 0);
SetIndexDrawBegin(4, 0);

SetIndexBuffer(5, bufDown3);
SetIndexStyle(5, DRAW_LINE);
SetIndexShift(5, 0);
SetIndexDrawBegin(5, 0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
int period = 1; //сюда заносим самый большой расчетный период

if(rates_total < period)
return(-1); //на графике нет достаточного количества баров

int limit = rates_total - prev_calculated;

//текущий бар всегда пересчитываем и предыдудщий
limit++;

//при первом расчете может выйти за 0, поэтому
while(limit < 0)
limit++;

//при первом расчете - отступаем слева, так как там не хватит свечей для расчета
limit = MathMin(limit, rates_total - period);

//сам рассчет
for(int i = limit; i >= 0; i--)
{
int shift = iBarShift(Symbol(), UpTime, Time);
double h = iHigh(Symbol(), UpTime, shift + 1);
double l = iLow(Symbol(), UpTime, shift + 1);
double o = iOpen(Symbol(), UpTime, shift);
bufUp1 = o + (h - l) * (1 + Range1Percent) / 100;
bufUp2 = o + (h - l) * (1 + Range2Percent) / 100;
bufUp3 = o + (h - l) * (1 + Range3Percent) / 100;
bufDown1 = o - (h - l) * (1 + Range1Percent) / 100;
bufDown2 = o - (h - l) * (1 + Range2Percent) / 100;
bufDown3 = o - (h - l) * (1 + Range3Percent) / 100;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
 
Назад
Верх Низ