Как кодировать? - страница 166

 

спасибо за ваш ответ.

но это не работает, если было проскальзывание, когда позиция была закрыта, верно?

 
codersview:
Привет всем,

У меня проблема с советником RSI и MA...

У меня индикатор работает правильно... Все, что я хочу, это преобразовать его в советника...

Я попробовал несколько вещей. IndicatorCounted() не работает в советнике, поэтому я попытался жестко закодировать значения в цикле for (bar=0; bar<15; bar++), я получил правильный RSI, но SMA не дает правильных значений...

Я прилагаю код для SMA, пересекающей RSI...

Так что не мог бы кто-нибудь помочь мне преобразовать этот индикатор в советника.

***************************************************************************************************************************************

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 LawnGreen

#property indicator_color2 DarkBlue

double ExtMapBuffer1[];

double ExtMapBuffer2[];

int init()

{

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);

SetIndexBuffer(1,ExtMapBuffer2);

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int bar, limit;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-IndicatorCounted();

for(bar=0; bar<limit; bar++)

ExtMapBuffer1 = iRSI(NULL,0,14,PRICE_TYPICAL,bar);

for(bar=0; bar<limit; bar++)

ExtMapBuffer2=iMAOnArray(ExtMapBuffer1,Bars,14,0,MODE_SMA,bar);

return(0);

}

***************************************************************************************************************************************

Спасибо и с уважением,

Ганеш

Ганеш,

Попробуйте сделать бары в порядке времени.

Вместо for(bar=0; bar<limit; bar++)

используйте for(bar=limit-1; bar>=0; bar--)

Chazzmoney

 

Привет

Спасибо за быстрый ответ... Я попробовал, но это ничего не меняет...

Кроме того, если мы используем Bars в цикле, он должен вычислить все значения (для всех баров) для каждого тика... и там может быть задержка... Также значение SMA будет равно нулю.

В индикаторе мы вычисляем RSI и EMA только для нового бара с помощью IndicatorCounted(), но мы не можем использовать это в советнике...

Точное место проблемы - второй цикл for и значения для iMAOnArray.

Первый цикл for работает отлично, даже когда мы его жестко кодируем...

 
jan100:
спасибо за ответ. но это не работает, если было проскальзывание, когда позиция была закрыта, верно?

Некоторые брокеры пишут [sl] и [tp] в поле комментария. Вы тоже можете использовать это.

 

спасибо. я попробую.

как можно выбрать последний закрытый ордер с правильным магическим числом?

 
jan100:
спасибо. попробую. а как можно выбрать последний закрытый ордер с нужным магическим номером?

Если вы находите его в списке истории, это закрытый ордер, если в общем списке - еще открытый.

 

Запрос кода Ea: Закрытие предыдущего ордера при открытии новой позиции

Здравствуйте, я хотел бы сделать запрос на код для того, чтобы при открытии новой позиции, автоматически закрывался предыдущий ордер. Имеется в виду, что я не хочу использовать тейк-профит или трейлинг.

Пример:

Когда открывается ордер buy, предыдущий ордер sell закрывается.

Когда ордер sell открыт, предыдущий ордер buy закрывается.

Я нашел код OrderCloseBy(), но я не знаю, куда именно поместить этот код.

спасибо

 
darkkiller:
Здравствуйте, я хотел бы сделать запрос на код для того, чтобы при открытии новой позиции, автоматически закрывался предыдущий ордер. Я не хочу использовать тейк-профит или трейлинг.

Пример:

Когда ордер buy открыт, предыдущий ордер sell закрывается

Когда ордер sell открыт, предыдущий ордер buy закроется

Я нашел код OrderCloseBy(), но я не знаю, куда именно поместить этот код.

спасибо

Решение проблемы

поставить после OrderSend BUY

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // закрываем позицию

}

вставить после OrderSend SELL

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрытие позиции

}

Другой код я взял из ForexFactory благодаря (Fulltime247, magnumfreak)

extern int MAGICTerminal=101;

extern double LOTSize=0.10;

extern string ORDERComment="Текст комментария ордера";

//Подсчет итогов...

int btotal=0; int stotal=0; int ticket=0; double closelots=0; bool xbool;

for( int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

xbool=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && OrderMagicNumber()==MAGICTerminal && OrderSymbol()==Symbol()){btotal++; ticket=OrderTicket(); closelots=OrderLots();}

if(OrderType()==OP_SELL && OrderMagicNumber()==MAGICTerminal && OrderSymbol()==Symbol()){stotal++; ticket=OrderTicket(); closelots=OrderLots();}

}// КОНЕЧНЫЙ СЧЕТ ИТОГОВ...

if(WHATEVER YOUR CONDITION FOR A BUY)

{

if(btotal>0){OrderClose(ticket,closelots,Bid,3,CLR_NONE);}

ticket=OrderSend(Symbol(),OP_BUY,LOTSize,Ask,3,0,0,ORDERComment,MAGICTerminal,0,Magenta);

}

if(WHATEVER YOUR CONDITION FOR A SELL)

{

if(stotal>0){OrderClose(ticket,closelots,Ask,3,CLR_NONE);}

ticket=OrderSend(Symbol(),OP_SELL,LOTSize,Bid,3,0,0,ORDERComment,MAGICTerminal,0,Lime);

}
 
 

Я новичок в MT4.

Я хочу подсчитать количество баров после того, как shortMA пересекла longMA, кто-нибудь знает, как закодировать эту функцию?

Заранее спасибо!