Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1968

 
Artis98 #:

Я попробовал добавить, вот что вышло

Ничего не изменилось. Что не так сделал?

все.

Возможно, чтоб был нужный результат, нужно немного больше понимать что делаете.

 
Artis98 #:

если сигнал на buy от индюка - открываем ордер на BUY. Если индюк даёт сигнал на sell - закрыаем BUY и открываем ордер на SELL.

Вызывайте функцию закрытия всех открытых позиций, перед открытием новых.

bool CloseOrders(int eMagic, string eSymbol)
   {
   bool eResult=true;
   MqlTick eTick;
   for(int i=OrdersTotal()-1; i>=0; i--)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=eSymbol) continue;
      if(OrderMagicNumber()!=eMagic) continue;      
      if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
      SymbolInfoTick(eSymbol,eTick);   
      if(!OrderClose(OrderTicket(),OrderLots(),(OrderType()==OP_BUY?eTick.bid:eTick.ask),2*(int)SymbolInfoInteger(eSymbol,SYMBOL_SPREAD),clrGoldenrod)) eResult=false;
      }
   return(eResult);
   }

так:

if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits);
if(CloseOrders(Magic,Symbol()))
   {
   r=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sl,tp,"",Magic,0,Red);
   }
 
Andrei Sokolov #:

1 :

если(сигнал покупки)

{

закрыть продажи;

открыть покупку;

}

2 : параметру сдвиг в источнике задайте нужное количество свечей.

Ну допустим, исходя из вашей схемы, только по 1 если, тогда буде следующее:

void OnTick()
  {
   double FBlue=iCustom(NULL,0,IndName,MAMetod,MAPeriod,4,Shift);
   double FRed=iCustom(NULL,0,IndName,MAMetod,MAPeriod,5,Shift);

   if(CountTrades()<1) OpenPos();
   
  if(FBlue=1)
{
OrderClose;
OpenPos();
}

   Comment("\n Blue: ",FBlue,
           "\n Red: ",FRed);
//---
  }

Я не знаю как правильно прописать закрытие ордера конкретного типа и после открыть ордер в противоположном направлении. Если поможете - буду признателен очень

 
Artis98 #:

Ну допустим, исходя из вашей схемы, только по 1 если, тогда буде следующее:

Я не знаю как правильно прописать закрытие ордера конкретного типа и после открыть ордер в противоположном направлении. Если поможете - буду признателен очень

Пример функции закрытия ордеров на покупку 

void CloseBuy()
{
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType()==OP_BUY 
         && OrderMagicNumber()==magic
         && OrderSymbol() == Symbol())
         {
            if(!OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Black))
            {
                  Print("CloseBuy() ошибка закрытия ", GetLastError()); 
            }
         }   
      }
   }
}

Для открытия другого используйте OrderSend

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
     Здравствуйте! 2022.05.30_23:55 GMT+3. Я писал в MQL5 простой советник. Источник сигналов на покупку или продажу -- индикатор Ichimoku, линия Tenkan-sen с периодом усреднения 17. Для графика валютной пары GBPUSD,Weekly. Как основу использовал код стандартного советника MetaQuotes Moving Average.mq5. Почему я пишу вопрос на форум? Я сделал работоспособный советник. Но он реагирует не на все изменения уровней линии Tenkan-sen. Я подумал, что тут нужно использовать функцию Refresh() для обновления значений цен и индикатора. Включил файлы из Стандартной библиотеки, где есть функция Refresh(). Есть обновление и цен, и индикаторов. Компиляция выдаёт 0 ошибок, 0 предупреждений, но советник перестал открывать позиции. Финальный баланс в тестере стратегий $10 000. Меня никто не учил программированию. Как понимаю так и пишу. Может кто подскажет как для этого советника написать функцию Refresh()? Если тут действительно нужна эта функция. Я бы просил Тришкина. У него большой опыт в ООП программировании. Но может он занят. Надеюсь, я получу ответ на свой вопрос. Прилагаю два файла советника: один работает, но не лучшим образом. А второй не работает. 00:22 GMT+3.    
Файлы:
 
Artis98 #:

Ну допустим, исходя из вашей схемы, только по 1 если, тогда буде следующее:

Я не знаю как правильно прописать закрытие ордера конкретного типа и после открыть ордер в противоположном направлении. Если поможете - буду признателен очень

Посмотрите статью, там есть хорошие примеры.

Передача торговых сигналов в универсальном советнике.
Передача торговых сигналов в универсальном советнике.
  • www.mql5.com
В статье описываются различные способы передачи торговых сигналов из сигнального модуля универсального советника в модуль управления позициями и ордерами. Рассматриваются последовательный и параллельный интерфейсы.
 
Николай Никитюк #:
     Здравствуйте! 2022.05.30_23:55 GMT+3. Я писал в MQL5 простой советник. Источник сигналов на покупку или продажу -- индикатор Ichimoku, линия Tenkan-sen с периодом усреднения 17. Для графика валютной пары GBPUSD,Weekly. Как основу использовал код стандартного советника MetaQuotes Moving Average.mq5. Почему я пишу вопрос на форум? Я сделал работоспособный советник. Но он реагирует не на все изменения уровней линии Tenkan-sen. Я подумал, что тут нужно использовать функцию Refresh() для обновления значений цен и индикатора. Включил файлы из Стандартной библиотеки, где есть функция Refresh(). Есть обновление и цен, и индикаторов. Компиляция выдаёт 0 ошибок, 0 предупреждений, но советник перестал открывать позиции. Финальный баланс в тестере стратегий $10 000. Меня никто не учил программированию. Как понимаю так и пишу. Может кто подскажет как для этого советника написать функцию Refresh()? Если тут действительно нужна эта функция. Я бы просил Тришкина. У него большой опыт в ООП программировании. Но может он занят. Надеюсь, я получу ответ на свой вопрос. Прилагаю два файла советника: один работает, но не лучшим образом. А второй не работает. 00:22 GMT+3.    

Здравствуйте, Николай!

В советнике IchimokuEA.mq5, который не работает, замените в строке номер 234

void Processing()

на

void OnTick()

Вот, что получится с настройками по умолчанию


Другой код советника IchimokuEA (2).mq5 не смотрел, т.к. сейчас нет времени.

С уважением, Владимир.

 
     Здравствуйте, Владимир! 2022.06.01_9:32 GMT+3. Спасибо за помощь. Я согласен, что так, как Вы написали можно сделать. Но я возился с советником, который не работал, и он заработал. Но лучше торговать не стал. Я добавил инициализацию тех функций включаемых файлов, которые использовал. 9:38 GMT+3. 
 

В определении методов класса часто в программах можно встретить слово "const" в конце строки.

Т.е. что-то вроде такого:

long            OrderMagicNumber(void)        const;

Никто не подскажет, что слово "const" обозначает в данном случае? Ну или в каком разделе хэлпа это искать?

Никак не могу найти это в хэлпе.

 
MQL_User #:

В определении методов класса часто в программах можно встретить слово "const" в конце строки.

Т.е. что-то вроде такого:

long            OrderMagicNumber(void)        const;

Никто не подскажет, что слово "const" обозначает в данном случае? Ну или в каком разделе хэлпа это искать?

Никак не могу найти это в хэлпе.

И правда, найти непросто: https://www.mql5.com/ru/docs/basis/oop/staticmembers#this

Причина обращения: