Здравствуйте, Антон
Попробуйте так:
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); } //+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени суток. Ниже предоставлен код, в котором при достижении размера бара в 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);
}