Не открываются ордера

 

Доброго времени суток. Ниже предоставлен код, в котором при достижении размера бара в 100 пунктов должен открываться ордер, но ордера не открываются. Может кто подскажет в чем дело)

void OnTick()

  { 

   Check_Accoint_Parametrs();

   Trade();

  }


bool long_bar_UP()

{

bool rez = false;

   if (iClose(_Symbol,PERIOD_CURRENT, 0)-iOpen(_Symbol, PERIOD_CURRENT, 0 )> 100*_Point )

    rez=true;

    if (iOpen(_Symbol, PERIOD_CURRENT, 0 )-iClose(_Symbol, PERIOD_CURRENT, 0 )<= 100*_Point )

   rez=false;

   return(rez);

  }


bool long_bar_DN()

{

bool rez = false;

   if (iOpen(_Symbol, PERIOD_CURRENT , 0)-iClose(_Symbol, PERIOD_CURRENT, 0 )>100*_Point)

   rez=true;

   if (iClose(_Symbol, PERIOD_CURRENT , 0)-iOpen(_Symbol, PERIOD_CURRENT , 0)<= 100*_Point )

   rez=false;

   return(rez);

   }

void Trade()

{

if (long_bar_DN()==true )

   OpenSell(LOT,Expert_ID);

if (long_bar_UP()==true )

   OpenBuy(LOT,Expert_ID);

}

 

Здравствуйте, Антон

Попробуйте так:

bool long_bar_UP() {
   if (iClose(_Symbol, PERIOD_CURRENT, 0) - iOpen(_Symbol, PERIOD_CURRENT, 0) > 100 * _Point ) {
      return true;
   }
   return false;
}

bool long_bar_DN() {
   if (iOpen(_Symbol, PERIOD_CURRENT, 0) - iClose(_Symbol, PERIOD_CURRENT, 0) > 100 * _Point) {
      return true;
   }
   return false;
}

void Trade() {
   if(long_bar_DN()) {
      OpenSell(LOT, Expert_ID);
   } else if(long_bar_UP()) {
      OpenBuy(LOT, Expert_ID);
   }
}

А у вас получается, что сначала если, например,
iClose(...) - iOpen(...) == 110 (что больше 100), то rez = true.

Но дальше вы берете противоположное выражение 
iOpen(...) - iClose(...) == -110, и оно будет меньше 100, поэтому rez = false.

Если, например,
iClose(...) - iOpen(...) == 50 (что меньше 100), то rez остается с начальным значением false.

Затем противоположное выражение 
iOpen(...) - iClose(...) == -50 будет меньше 100, поэтому rez = false.

Значит, ваша функция никогда не возвращает true.

 

Если кому-то захочется поиграться с этой стратегией на MT5, то код ниже. На четверке писать - это не ко мне.

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

//+------------------------------------------------------------------+
//|                                               Proba_100_Pips.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#include <Trade/Trade.mqh>
CTrade trade;
//--- Input parameters
input ushort Size_Bar=100;
input ushort TP=100;
input ushort SL=100;
input double LOT=0.01;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Trade();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool long_bar_UP()
  {
   if(iClose(_Symbol, _Period, 0) - iOpen(_Symbol, _Period, 0) >= Size_Bar*_Point)
      return(true);
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool long_bar_DN()
  {
   if(iOpen(_Symbol, _Period, 0) - iClose(_Symbol, _Period, 0) >= Size_Bar*_Point)
      return(true);
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trade()
  {
   if(PositionSelect(_Symbol))
      return;
   double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   if(long_bar_DN()==true)
      trade.Sell(LOT,_Symbol,Bid,Bid+SL*_Point,Bid-TP*_Point);
   if(long_bar_UP()==true)
      trade.Buy(LOT,_Symbol,Ask,Ask-SL*_Point,Ask+TP*_Point);
  }
//+------------------------------------------------------------------+
Причина обращения: