Подскажите, а как сделать так, что-бы не было открытие ордера с каждой новой свечи если соблюдаются все условия? Просто я вставил этот код, он действительно начал ждать 4 свечи подтверждения, но после открытия ордера 1 раз (при наступлении всех условий) он начал открывать ордер на всех следующих свечах, если условия сохранялись, вот так на тестере это выглядит.
+ на всякий случай, вставлю весь код изначальный, а то вдруг я что-то важное упустил:
Подскажите, а как сделать так, что-бы не было открытие ордера с каждой новой свечи если соблюдаются все условия? Просто я вставил этот код, он действительно начал ждать 4 свечи подтверждения, но после открытия ордера 1 раз (при наступлении всех условий) он начал открывать ордер на всех следующих свечах, если условия сохранялись, вот так на тестере это выглядит.
+ на всякий случай, вставлю весь код изначальный, а то вдруг я что-то важное упустил:
Нужен контроль(счетчик) открытых ордеров
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(CheckForOpen()==0&&CountTrade(0)==0) // Если сигнал для покупок и нет открытых покупок
{
if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK");
}
if(CheckForOpen()==1&&CountTrade(1)==0) // Если сигнал для продаж и нет открытых продаж
{
if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK");
}
}
//+----------------------------------------------------------------------------+//| Счетчик ордеров (0)-buy (1)-sell ()-all |//+----------------------------------------------------------------------------+int CountTrade(int ot=-1)
{
int count = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==ot||ot<0) count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+int CheckForOpen() // Открытие ордера по методу Пуриа
{
double malw,mas1,mas2,macd;
int res=-1, buy=0, sell=0;
// Считывание параметров индикаторов 3 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 2 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 1 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
// Считывание параметров индикаторов 0 свечи
malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
if(buy ==4) res=0;
if(sell==4) res=1;
return(res);
}
Попробовал, да, уже не было повторных входов. Но если Countrade такой будет, то тогда не будет реакции на новые сигналы, пока открыт будет хоть один ордер, что не нужно. Т.е. не должно быть повторных открытий после 1го раза, но и должен быть вход в ордер, если malw или/и macd изменили своё положение и по условиям - это сигнал + если сигал подтверждается 4 раза подряд => открытие позиции. Если это добавить код, то тогда, по идеи, всё должно быть готово. Что нужно ещё добавить для этого ?
artem artem #: Попробовал, да, уже не было повторных входов. Но если Countrade такой будет, то тогда не будет реакции на новые сигналы, пока открыт будет хоть один ордер, что не нужно. Т.е. не должно быть повторных открытий после 1го раза, но и должен быть вход в ордер, если malw или/и macd изменили своё положение и по условиям - это сигнал + если сигал подтверждается 4 раза подряд => открытие позиции. Если это добавить код, то тогда, по идеи, всё должно быть готово. Что нужно ещё добавить для этого ?
Если порциями выдавать, то такая фигня и будет. В данном случае все функции построены по тем условиям которые ты описал.
Выделенно то, что я попытался внести от себя. В итоге, всё работает как и надо, НО сделки открывает тольно на buy. Как сделать так, что-бы и на sell открывал тоже, кто знает???
Попробовал внести изменения в код от MakarFX, в итоге вот что имею на данный момент:
Выделенно то, что я попытался внести от себя. В итоге, всё работает как и надо, НО сделки открывает тольно на buy. Как сделать так, что-бы и на sell открывал тоже, кто знает???
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Тут пальці до того, що негоже тільки OrderSend пихати, а потім нехтуватись що щось неробе. Завжди помилки шукати потрібно.
Володя, вопрос был в другом.
Володя, вопрос был в другом.
в чем ?
в чем ?
Добраніч)
Тобі теж.
Подскажите, а как сделать так, что-бы не было открытие ордера с каждой новой свечи если соблюдаются все условия? Просто я вставил этот код, он действительно начал ждать 4 свечи подтверждения, но после открытия ордера 1 раз (при наступлении всех условий) он начал открывать ордер на всех следующих свечах, если условия сохранялись, вот так на тестере это выглядит.
+ на всякий случай, вставлю весь код изначальный, а то вдруг я что-то важное упустил:
Подскажите, а как сделать так, что-бы не было открытие ордера с каждой новой свечи если соблюдаются все условия? Просто я вставил этот код, он действительно начал ждать 4 свечи подтверждения, но после открытия ордера 1 раз (при наступлении всех условий) он начал открывать ордер на всех следующих свечах, если условия сохранялись, вот так на тестере это выглядит.
+ на всякий случай, вставлю весь код изначальный, а то вдруг я что-то важное упустил:
Нужен контроль(счетчик) открытых ордеров
Попробовал, да, уже не было повторных входов. Но если Countrade такой будет, то тогда не будет реакции на новые сигналы, пока открыт будет хоть один ордер, что не нужно. Т.е. не должно быть повторных открытий после 1го раза, но и должен быть вход в ордер, если malw или/и macd изменили своё положение и по условиям - это сигнал + если сигал подтверждается 4 раза подряд => открытие позиции. Если это добавить код, то тогда, по идеи, всё должно быть готово. Что нужно ещё добавить для этого ?
Попробовал внести изменения в код от MakarFX, в итоге вот что имею на данный момент:
Выделенно то, что я попытался внести от себя. В итоге, всё работает как и надо, НО сделки открывает тольно на buy. Как сделать так, что-бы и на sell открывал тоже, кто знает???
Попробовал внести изменения в код от MakarFX, в итоге вот что имею на данный момент:
Выделенно то, что я попытался внести от себя. В итоге, всё работает как и надо, НО сделки открывает тольно на buy. Как сделать так, что-бы и на sell открывал тоже, кто знает???