Ваши вопросы по языку MQL4

nurfirdaus

Новичок форума
Если нужен предпоследний сигнал то циклом от 0 бара перебираем дальше. Последний сигнал пропускаем. Следующий запиминаем и прекращаем цикл.

спасибо за объяснение, но как я могу назвать последний сигнал сигналом?
 

nurfirdaus

Новичок форума
Красная вертикальная линия указана MACD выше уровня 0,011, а черная линия - сигналом.

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

PHP:
if(LastCross && macdNow > signNow && macdPre2 < signPre2) {
        Signal = 1; // buy
    }
 

Вложения

  • EURUSDDaily.png
    EURUSDDaily.png
    41,9 КБ · Просмотры: 33

eevviill2

Местный знаток
Красная вертикальная линия указана MACD выше уровня 0,011, а черная линия - сигналом.

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

PHP:
if(LastCross && macdNow > signNow && macdPre2 < signPre2) {
        Signal = 1; // buy
    }
Ну тогда просто macd перекбирай от 0 бара и когда он пересечёт в цыкле 0.11 уровень останвливай цикл.
 

machamdhg

Прохожий
return value of 'OrderModify' should be checked plz Help

Код:
void f0_17(int Ai_0, int Ai_4, double A_price_8) {
   int Li_16;
   double order_stoploss_20;
   double price_28;
   if (Ai_4 != 0) {
      for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
         if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != Gi_352) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == Gi_352) {
               if (OrderType() == OP_BUY) {
                  Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
                  if (Li_16 < Ai_0) continue;
                  order_stoploss_20 = OrderStopLoss();
                  price_28 = Bid - Ai_4 * Point;
                  if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
                  if (Li_16 < Ai_0) continue;
                  order_stoploss_20 = OrderStopLoss();
                  price_28 = Ask + Ai_4 * Point;
                  if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}
 

Ротан Мардарий

Местный знаток
return value of 'OrderModify' should be checked plz Help

Код:
void f0_17(int Ai_0, int Ai_4, double A_price_8) {
   int Li_16;
   double order_stoploss_20;
   double price_28;
   bool OrderOperationResult = false;
   if (Ai_4 != 0) {
      for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
         if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != Gi_352) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == Gi_352) {
               if (OrderType() == OP_BUY) {
                  Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
                  if (Li_16 < Ai_0) continue;
                  order_stoploss_20 = OrderStopLoss();
                  price_28 = Bid - Ai_4 * Point;
                  if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderOperationResult = OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
                  if (Li_16 < Ai_0) continue;
                  order_stoploss_20 = OrderStopLoss();
                  price_28 = Ask + Ai_4 * Point;
                  if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderOperationResult = OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}

code updated
 

Артмен

Новичок форума
Здравствуйте! Я сейчас покажусь очень глупым если я задам этот вопрос... но я его задам(что то меня переклинило вот я и туплю). Так вот: скажите пожалуйста как можно сделать так что б сов видел сигнал индюка определённое кол-во баров после самого сигнала? Заранее благодарен...))))
 

MrGreen86

Гуру форума
Здравствуйте! Я сейчас покажусь очень глупым если я задам этот вопрос... но я его задам(что то меня переклинило вот я и туплю). Так вот: скажите пожалуйста как можно сделать так что б сов видел сигнал индюка определённое кол-во баров после самого сигнала? Заранее благодарен...))))

Вопрос не глупый. Записывайте сигнал в переменную. На открытии каждой новой свечи делайте поиск сигнала по последним N свечам.
на примере стохастика и уровня 50:

PHP:
extern int              signal_bars    = 4;

extern int              Kperiod        = 14;
extern int              Dperiod        = 5;
extern int              slowing        = 5;
extern ENUM_MA_METHOD   method         = MODE_SMA;
extern ENUM_STO_PRICE   price          = STO_LOWHIGH;

int signal = -1;
datetime time_bar;

void OnTick() {
   if (time_bar!=Time[0]) {
      time_bar=Time[0];
      signal = -1; // обнулим прошлый сигнал
      for(int i=1;i<=signal_bars;i++) {   
         double sto_now = iStochastic(_Symbol,0,Kperiod,Dperiod,slowing,method,price, MODE_MAIN, i);
         double sto_last = iStochastic(_Symbol,0,Kperiod,Dperiod,slowing,method,price, MODE_MAIN, i+1);
         if(sto_now>50 && sto_last<=50) { signal = 0; break; } // нашли пересечение вверх
         if(sto_now<50 && sto_last>=50) { signal = 1; break; } // нашли пересечение вниз
         }
      }
   }
если на последних 4х свечах есть сигнал пересечения то он будет записан в переменной signal.
 

оn220

Интересующийся
Доброго дня! Как быть,что еще надо?.Хочу добавить в функцию такое условие,чтобы если MA30<MA90,то lastsell обнулялся,и начинал запоминать с новой цены предыдущего закрыого ордера.А тут получается он обнуляется,но дальше ордера открываются как обычно режиме по каждому сигналу и выше и ниже.Само условие на вход if (OpenPriceSell()<Bid-10*Point && MA30>MA90 && FF10<FF11).И
PHP:
  double OpenPriceSell()
 {
  double MA30 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,0);
  double MA90 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,0);
  double MA31 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,1);
  double MA91 = iMA(NULL,0,period,0,MODE_EMA,PRICE_OPEN,1);
  double lastsell=0;
  int i, ticket=0;
  
  for( i=OrdersHistoryTotal()-1; i>=0; i--)
   {
    if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true)
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==321)
       {
          if(OrderType() == OP_SELL) 
         {
             if(OrderTicket()> ticket)
                  {
                 ticket=OrderTicket();
                 lastsell=OrderOpenPrice();
                  }
             if (MA30<MA90&&MA31>MA91)lastsell=-1;     
        
     }
     } 
   }   
   }
  return(lastsell);
 }
 

Артмен

Новичок форума
А вот ещё один вопрос: скажите пожалуйста как прописать в коде сова функцию которая реагирует на закрытие ордера по Стоплоссу/Тэйкпрофиту?
 
Последнее редактирование:

Ugar

Гуру форума
PHP:
StringFined(OrderComment(),"[sl]")!=-1
Стоит сначала поинтересоваться у брокера, меняют ли они комментарии ордера при закрытии по стоп лосс или тейк профит. Не все это делают.
Так же о всех случаях при которых меняют комментарий и что пишут.
Например может быть закрытие по стоп лосс с комментарием [GapSL], или [SLGap], или ... вариантов много.
 

eevviill2

Местный знаток
Стоит сначала поинтересоваться у брокера, меняют ли они комментарии ордера при закрытии по стоп лосс или тейк профит. Не все это делают.
Так же о всех случаях при которых меняют комментарий и что пишут.
Например может быть закрытие по стоп лосс с комментарием [GapSL], или [SLGap], или ... вариантов много.
Не видел таких.
PHP:
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderStopLoss())
PHP:
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderStopLoss() && OrderStopLoss()!=0)
 

Ugar

Гуру форума
Не видел таких.
PHP:
if(OrderType()==OP_BUY && OrderClosePrice()<=OrderStopLoss())
PHP:
if(OrderType()==OP_SELL && OrderClosePrice()>=OrderStopLoss() && OrderStopLoss()!=0)
То же вариант. Но он то же не везде и всегда будет работать. К сожалению в MQL4 нет универсального и надёжного способа определения причины закрытия. Именно по этому многие брокеры пишут её в комментарии. Вариант с комментарием то же будет работать в большинства случаев и у большинства брокеров.
MQL5 отличается ещё и тем что всегда можно узнать причину закрытия.
 

snmax

Прохожий
Включение файлов (#include)

Всем доброго времени.

Прошу помочь разобраться с подключением библиотеки .MQH

Сразу после запуска теста советника программа - стоп

сообщение в журнале :

2018.10.02 18:15:45.559 2018.06.01 00:00:00 Testing pass stopped due to a critical error in the EA

2018.10.02 18:15:45.559 2018.06.01 00:00:00 test EURUSD,H1: unresolved import function call

2018.10.02 18:15:45.559 2018.06.01 00:00:00 Cannot find 'calc' in 'my_func.ex4'


Импорт Dll в терминале включён

Прошу специалистов посмотреть файлы и помочь разобраться.

Всем спасибо.
 

Вложения

  • test.mq4
    192 байт · Просмотры: 12
  • my_func.mq4
    250 байт · Просмотры: 12
  • my_func.mqh
    3,2 КБ · Просмотры: 9
Верх