Помощь в кодировании - страница 161

 

2 ордера одновременно

Здравствуйте, я пытаюсь написать советника, и у меня возникла проблема, не знаю как ее решить :?

проблема в том, что я хочу открыть 2 ордера (OPENSTOP и SELLSTOP) в текущий момент времени, но в этом советнике их открывается около 100 или больше, так как решить эту проблему, чтобы открыть только 2 :?

extern double Lots=1;

extern double h_beg=10;

extern double h_end=23;

extern double TakeProfit=20;

extern double StopLoss=90;

//+------------------------------------------------------------------+

int start()

{

double prevbar_H;

double prevbar_L;

double bar_H;

double bar_L;

двойная продажа;

двойная покупка;

bool trade_time;

bool sell_opened;

bool buy_opened;

//+------------------------------------------------------------------+

if (Hour()==h_beg)

{

trade_time = true;

for(int h=1; h<=11; h++)

{

bar_H = iHigh(NULL,0,h);

if (prevbar_H==0 || prevbar_H<bar_H)

{

prevbar_H = bar_H;

}

}

for(int l=1; l<=11; l++)

{

bar_L = iLow(NULL,0,l);

if (prevbar_L==0 || prevbar_L>bar_L)

{

prevbar_L = bar_L;

}

}

}

if (Hour()==h_end)

{

торговое_время = false;

prevbar_H = 0;

prevbar_L = 0;

DeletePending();

DeleteBUY();

sell=0;

buy=0;

}

//+--------------------------------------------------------buy or sell----------+

if(Hour()==h_beg)

{

if(sell==0)

{

OrderSend(Symbol(),OP_SELLSTOP,Lots,prevbar_L,3,prevbar_L+200*Point,prevbar_L-200*Point, "MA sample",16384,0,Green);

sell=1;

}

if(buy==0)

{

OrderSend(Symbol(),OP_BUYSTOP,Lots,prevbar_H,3,prevbar_H-200*Point,prevbar_H+200*Point, "MA sample",16384,0,Green);

buy=1;

}

}

//+------------------------------------------------------------------+

return(0);

}

//+------------------------------------------------------------------+

void DeletePending()

{

for(int i=0; i<OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

{

OrderDelete(OrderTicket());

}

}

}

void DeleteBUY()

{

for(int i=0; i<OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

{

if (OrderType() == OP_BUY)

{

OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

}

}

}

}
 
carbonmimetic:
Привет, Младен,

если я хочу считать бары между двумя минимумами, как избежать бара воскресенья с 23.00 вечера до 00.00?

потому что на 4h графике есть этот бар и длится он всего один час..... и он появляется также на дневном графике.

заранее спасибо

carbonmimetic

Добавьте проверку дня недели, подобную этой:

if (TimeDayOfWeek(Time[yourCounter])!=0)

0 - это воскресенье, и в этом случае вы должны пропустить этот бар.

 

потому что система, которую я использую, похожа на торговую систему мартингейла, как только я размещаю ордер, есть примерно 1 рабочий ордер и 4 отложенных ордера, когда я проигрываю, 2-й отложенный ордер становится рабочим ордером, поэтому мне нужно переместить ТП предыдущего ордера равным текущему ордеру, поэтому я надеюсь, что советник может автоматически это сделать, чтобы мне не нужно было следить за ним, потому что иногда нужно уходить на обед или ужин. я пытаюсь закодировать себя, но не знаю, как выбрать новый ордер и изменить предыдущий ордер.

 
mladen:
carbonmimetic

Добавьте проверку дня недели, подобную этой:

if (TimeDayOfWeek(Time[yourCounter])!=0)
0 - это воскресенье, и в этом случае вы должны пропустить этот бар

ok.... большое спасибо!

 

привет младен,

не могли бы вы помочь разобраться с кодом, я вижу на живом графике, что он может перерисовывать прошедшую сигнальную линию, когда я нажимаю на обновление в меню mt4, линия может полностью сменить позицию, я имею ввиду прошедшую сигнальную линию.

Не могли бы вы решить эту проблему, чтобы не перерисовывать прошлое или не может автообновление проблемы. это что-то вроде подсчета баров имеет проблему или пути внутреннего цикла? Я только поверхностный новичок в коде. Большое спасибо за помощь.

Файлы:
 
kenwa:
Привет, Младен,

не могли бы вы помочь разобраться с кодом, я вижу на живом графике, что он может перерисовывать прошедшую сигнальную линию, когда я нажимаю обновить меню мт4, линия может полностью сменить положение, я имею ввиду прошедшую сигнальную линию.

не могли бы вы решить эту проблему, не перерисовывать прошлое или не может автообновление проблемы. это что-то вроде подсчета баров есть проблема или пути внутреннего цикла? Я только поверхностный новичок в коде. Большое спасибо за помощь.

kenwa

Замените init и начните с этого:

double CCI_idx[];

double CCI_idt[];

int init()

{

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,CCI_idx);

SetIndexBuffer(1,CCI_idt);

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

int i,counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(i=limit;i>=0;i--) CCI_idt = iCCI(abc,0,CCI_Period,applied_price,i);

for(i=limit;i>=0;i--) CCI_idx = iMAOnArray(CCI_idt,Bars,MA_Period,0,MA_Method,i);

return(0);

}

Вы не можете использовать один и тот же буфер для сбора значений cci, а затем для хранения средних значений этих cci - это вызывало перерисовку. Также удалите ссылку на таймфрейм из вызова CCI. Если вы хотите, чтобы он вычислялся и в режиме мультитаймфрейма, его нужно написать по-другому

__________________________

PS: этот же совет можно применить к использованию разных символов на текущем графике. Количество измененных баров текущего символа не обязательно должно быть таким же, как количество баров другого целевого символа, чтобы снова получить эффект перерисовки, но я оставил все как есть.

 

Привет, Младен,

так как я очень поверхностный новичок или действительно знаю очень мало, я не могу понять ваш смысл, не могли бы вы приложить рабочий индикатор здесь? могу ли я использовать один буфер для расчета значения CCI и затем сделать среднее, вместо использования двух буферов? вы упоминаете различные символы, можно ли написать простую версию для размещения двух символов на одном графике? если это mtf, как написать вместо него, большое спасибо за помощь.

 
kenwa:
Привет mladen, обратитесь к #1606 выше, поскольку я очень поверхностный новичок или действительно знаю очень мало, я не могу понять ваш смысл, не могли бы вы прикрепить рабочий индикатор здесь? Могу ли я использовать один буфер для расчета значения CCI и затем сделал среднее, вместо использования двух буферов? Вы упоминаете различные символы, можно ли написать простую версию для размещения двух символов на одном графике? если это mtf, как написать вместо этого, большое спасибо за помощь.

kenwa

Вы не можете использовать один и тот же буфер для расчета буфера и затем хранить результаты среднего значения этого CCI в том же буфере - среднее значение изменит прошлые значения.

Что касается многосимвольного индикатора (того, который может обращаться к другим символам с текущего графика): если я опубликую решение для этого, то боюсь, что оно не будет простым. Для этого нет простого решения, и вам сначала нужно прояснить, что происходит с двумя разными символами в одно и то же время.

Прикрепляю версию, которая корректно работает на текущем символе и в текущем таймфрейме (это единственный способ, как вы можете вычислить среднее значение cci, если вы хотите использовать функцию iMAOnArray()).

Файлы:
 

kenwa

Это самый простой из возможных способов заставить его работать на нескольких таймфреймах и иметь возможность выбирать любой символ. Вы увидите, что это не так просто, как кажется на первый взгляд, но этот способ делает все необходимое для сбора правильных данных и избежания перерисовки, когда это происходит.

 

Привет, Младен,

Спасибо большое, как если ваш mtf если написать в не-mtf версии? Я не могу модифицировать себя из-за моего уровня кодирования детского сада. кстати, потому что вы, кажется, использовали 2 буфера для расчета, но mt4 позволяет только 8 буферов максимум, это так?Если я хочу как прикрепленный эталонный индикатор (который никак не является хорошим индикатором (имеет ошибки внутри я думаю, не так работоспособны в реальном времени)), просто для справки, он может показывать восемь символов одновременно, не обязательно валюту или любые символы, которые я хочу ввести самостоятельно извне, (я думаю, наложить тот же индикатор в sw не работает, так как вертикальная шкала не фиксируется там), как вы можете помочь мне создать cci mtf один, как один из эталонных индикаторов (не обязательно такой сложный, но имеет похожие функции?) Большое спасибо еще раз за добрую помощь.

Файлы:
reference.mq4  17 kb
Причина обращения: