У меня такое чувство, что мы немного потеряли контроль над кодом.
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
Нет, это точно не то место.
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
Эта "обработка ошибок" не делает ничего лучше. Проверьте еще раз.
Извините, но вчера были проблемы с интернетом (mql4.com перестал работать). Я пытался исправить кое-что и ........
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy#define MAGICMA2 2001// red strategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+bool New_Bar = false;
bool Fun_New_Bar() // bool
{
staticdatetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+//--- FOR BLUE---------------------------------------------------------int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//--- FOR RED--------------------------------------------------------------int OpenOrders_BULL6(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2) // magic ma 2 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
return(true);
}
bool BULL6()
{
if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
return(true);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+//--------------------------- blue bull4 magicma1 void OpenBULL41()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return(true);
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL42()
{
int result;
for(int i=1;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
}
}
//--------------------------- red bull6 magicma2 void OpenBULL61()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL62()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL63()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose_BULL4()
{
if(OrderOpenPrice()+4*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--) // add: -1
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);
}
}
}
void CheckForClose_BULL6()
{
if(OrderOpenPrice()+8*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
}
}
}
//+------------------------------------------------------------------+//| flag |//+------------------------------------------------------------------+
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar())
{
SignalBULL41Executed=true;
return(SignalBULL41Executed);
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4())
if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
if ( SignalBULL41Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
{
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL42Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
// ----------------bull6 if(BULL6())
if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
{
OpenBULL61();//do open buy position
SignalBULL61Executed=true;
if ( SignalBULL61Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
{
OpenBULL62();//do open buy position
SignalBULL62Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
{
OpenBULL63();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
}
//+------------------------------------------------------------------+
Нелегко вам помочь. Почему бы вам пока не попробовать реализовать только одну стратегию, но с соответствующейфункцией Open(), Close(), Count(), NewBar(), Signal().
Блок ниже находится за пределами функции start. Я не уверен, что это нужно.
Fun_New_Bar();
if (New_Bar==false); // <-- ???bool SignalBULL41Executed=false; // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false; // its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar()) // <-- Your Fun_New_Bar() function doesn't return anything,
{ // you set the global New_Bar variable with the function.
SignalBULL41Executed=true; // <-- You should set it to false on a new bar. return(SignalBULL41Executed); // <-- ???
}
Да, маленькими шагами, так что с ошибками можно справиться... Вы хотите выделить что-то конкретное из кодовой базы советника?
Я не увижу этого снова - я больше не буду помогать вам, если вы и дальше будете игнорировать шаги по исправлению, которые я - или кто-то другой - посоветовал сделать:
if( Bid==Close[1]+3*Point)
Проскальзывание равно 0? Вы, вероятно, получите ошибку. Но исправленная обработка ошибок поймает ее :-)
Это не неправильно, но не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
for(int i=0;i<OrdersTotal();i++)
Каков спред вашего брокера и сколько цифр у вас есть для символа, которым вы хотите торговать? Я не уверен, что вы правильно используете Point (Читайте на первой странице вашей темы).
Да, маленькими шагами, так что с ошибками можно справиться... Вы хотите выделить что-то конкретное из кодовой базы EA?
Я думаю, что нет, нечего светить, я понимаю, что я написал.
Я не увижу этого снова - я не буду помогать вам больше, если вы будете и дальше игнорировать шаги коррекции, которые я - или кто-то другой - посоветовал сделать:
Да. Я знаю, что делать NormalizeDouble, я думаю, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 конец! не бесконечность ), но я не могу написать это, может быть это?
if ( NormalizeDouble ( abc(),0 ) )
bool abc()
{
bool z,y,z;
x=Ставка;
y=Close[1]
z=x-y+3*Point
return(z);
}
или ?
If (NormalizeDouble ((Close[1]-Bid) +3*point),0 ) ;
Проскальзывание равно 0? Вы, вероятно, получите ошибку. Но фиксированная обработка ошибок поймает ее :-)
Я могу иметь +1 без проблем result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Ошибка будет обработана, хорошо, мы увидим, что будет после
Это не неправильно, но и не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
ОЧЕНЬ ХОРОШАЯ СТАТЬЯ! Я должен был прочитать ее в самом начале :)
Каков спред вашего брокера и сколько цифр у вас есть для символа, которым вы хотите торговать? Я не уверен, что вы правильно используете Point (прочитал на первой странице вашей темы).
Я помню их. У меня Admiral Market Bid = 1,29000 Ask = 1,29001. Это проблема, которую я знаю, но у меня нет решения на данный момент, я не нашел хорошего примера.
Да. Я знаю, что делает NormalizeDouble, я думаю, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 end! не бесконечность), но я не могу написать это, может быть это?
if (NormalizeDouble( abc(),0 ) )
bool abc()
{
Вы не можете NormalizeDouble() a bool, подсказка в названии функции и в документации тоже....
Вы не можете NormalizeDouble() a bool, подсказка находится в названии функции и в документации тоже. ...
Жаль, что мы не можем нормализовать истину, чтобы она была очень истинной :-(
Водзуууу: Да. Я знаю, что делает NormalizeDouble, я то, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 end! не бесконечность), но я не могу написать это, может быть это?
Нет, вы не должны нормализовать Bid или Close[1]. Я имел в виду, что вы просто не должны сравнивать их на равенство.
Ваш код действительно ищет тик, где Bid равен 1.31936
if( Bid==Close[1]+3*Point)
Вы пропустите свой сигнал. Этого не произойдет, если вы используете > .
Wodzuuuu: Я могу иметь +1 без проблем result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Это не делает его намного лучше. Все ваши расчеты в Points должны быть Pips, насколько я понимаю. Однако, у меня нет опыта работы с ECN брокерами, так что это может сработать.
Водзуууу:
Это не неправильно, но не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
ОЧЕНЬ ХОРОШАЯ СТАТЬЯ! Я должен прочитать их в самом начале :)
Согласен и есть еще много очень хороших статей, написанных тем же автором. Также книга - неплохое место для начала.
Водзуууу:
У меня Admiral Market Bid = 1,29000 Ask = 1,29001. Это проблема, которую я знаю, но у меня нет решения на данный момент, я не нашел хороший пример.
На сайте вашего брокера указано, что для EURUSD минимальный спред составляет 0,1. Средний спред составляет 0,5. <-- Это означает в пунктах! То есть 0,1 - это 1 пункт. 0,5 - это 5 пунктов. Так что в вашем случае один пипс - это 10*пункт. Спред запутает все ваши мини-расчеты, где вы добавляете только 3 пункта к цене. Наберите в поисковике "adjust for 5 digit broker" и вы найдете много примеров.
Еслиэтот кодбыл плох, потому что япередавалсигналы, то он улучшился.Я подумал, что проблемасовсемв другом месте, а нев знакеравенства '=='......... '>=' лучше, конечно.
if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)
Вопрос 1. Должен ли я использовать MyPips в свече, в этой функции? bool BULL4()
Поскольку выэксперт, я должен был сказать кое-что, это может быть важно. Сейчася используюплатформуMT4и вижу4 цифрыпосле запятой(Bid-Ask= 0.0001 обычно). На данный момент мызапрограммировалина MQL4, пусть так и будет. ВMT5я вижу5 цифрпосле запятой.разница междуMQL4 иMQL5. На данный момент эторазличиене имеет для менязначения. Важно,чтобынашсоветникработал хорошо. Я не хочув данный моментговорить об этом(если это ненеобходимо).
И Я НАПИСАЛ ПРОГРАММУ для меня это хорошо :) как насчет Вас?
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+// nothing yet, one moment//+------------------------------------------------------------------+//| These are adjusted for 5/4 digit brokers |//+------------------------------------------------------------------+double MyPips; // slippage and othersint init()
{
if (Digits == 5) // Adjust for five (5)
{
MyPips=Point*10;
}
else// Adjust for four (4, and ..)
{
MyPips=Point*1;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Condition send buy |//+------------------------------------------------------------------+bool BULL4send()
{
if( Bid>=Close[1]+MyPips*3)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+bool OpenBULL41()
{
int result;
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
if(result>0)
{
if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening BUY order : ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+bool CheckForCloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if(OrderOpenPrice()+8*MyPips < Ask) return(true);
elsereturn(false);
}
//+------------------------------------------------------------------+//| close |//+------------------------------------------------------------------+void CloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )
Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );
}
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
}
if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
}
//+------------------------------------------------------------------+
У меня такое чувство, что мы немного потеряли контроль над кодом.
Нет, это точно не то место.
Эта "обработка ошибок" не делает ничего лучше. Проверьте еще раз.
Это создано не для развлечения! Его следует использовать для сброса выполненных флагов на новом баре.
Что мы узнали о сравнении парных значений и имеет ли это смысл в данном случае?
Итак, вы решили удалить свой пост, на который я ссылаюсь... Молодец, это очень полезно!
Извините, но вчера были проблемы с интернетом (mql4.com перестал работать). Я пытался исправить кое-что и ........
Нелегко вам помочь. Почему бы вам пока не попробовать реализовать только одну стратегию, но с соответствующейфункцией Open(), Close(), Count(), NewBar(), Signal().
Блок ниже находится за пределами функции start. Я не уверен, что это нужно.
Я думаю так же, как и Вы, о маленьких шагах. Давайте возьмем только один вариант BULL4
Иногда выглядит как Ea для моей кодовой базы
https://www.mql5.com/en/code/9156 - интересно
Я понимаю их (но не чувствую), это флаг, ия понимаю его назначение.
Что вы думаете? О маленьких шагах
Да, маленькими шагами, так что с ошибками можно справиться...
Вы хотите выделить что-то конкретное из кодовой базы советника?
Я не увижу этого снова - я больше не буду помогать вам, если вы и дальше будете игнорировать шаги по исправлению, которые я - или кто-то другой - посоветовал сделать:
Проскальзывание равно 0? Вы, вероятно, получите ошибку. Но исправленная обработка ошибок поймает ее :-)
Это не неправильно, но не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
Каков спред вашего брокера и сколько цифр у вас есть для символа, которым вы хотите торговать? Я не уверен, что вы правильно используете Point (Читайте на первой странице вашей темы).
Да, маленькими шагами, так что с ошибками можно справиться...
Вы хотите выделить что-то конкретное из кодовой базы EA?
Я думаю, что нет, нечего светить, я понимаю, что я написал.
Я не увижу этого снова - я не буду помогать вам больше, если вы будете и дальше игнорировать шаги коррекции, которые я - или кто-то другой - посоветовал сделать:
Да. Я знаю, что делать NormalizeDouble, я думаю, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 конец! не бесконечность ), но я не могу написать это, может быть это?
if ( NormalizeDouble ( abc(),0 ) )
If ( NormalizeDouble ((Close[1]-Bid) +3*point),0 ) ;
Проскальзывание равно 0? Вы, вероятно, получите ошибку. Но фиксированная обработка ошибок поймает ее :-)
Я могу иметь +1 без проблем result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Ошибка будет обработана, хорошо, мы увидим, что будет после
Это не неправильно, но и не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
ОЧЕНЬ ХОРОШАЯ СТАТЬЯ! Я должен был прочитать ее в самом начале :)
Каков спред вашего брокера и сколько цифр у вас есть для символа, которым вы хотите торговать? Я не уверен, что вы правильно используете Point (прочитал на первой странице вашей темы).
Я помню их. У меня Admiral Market Bid = 1,29000 Ask = 1,29001. Это проблема, которую я знаю, но у меня нет решения на данный момент, я не нашел хорошего примера.
Я пишу код...
Да. Я знаю, что делает NormalizeDouble, я думаю, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 end! не бесконечность), но я не могу написать это, может быть это?
if (NormalizeDouble( abc(),0 ) )
Вы не можете NormalizeDouble() a bool, подсказка в названии функции и в документации тоже....
Вы не можете NormalizeDouble() a bool, подсказка находится в названии функции и в документации тоже. ...
Жаль, что мы не можем нормализовать истину, чтобы она была очень истинной :-(
Да. Я знаю, что делает NormalizeDouble, я то, что я понимаю (если у меня есть: euro/usd = 1.2390022129.....09.... И нам нужно: 1,29893 end! не бесконечность), но я не могу написать это, может быть это?
Нет, вы не должны нормализовать Bid или Close[1]. Я имел в виду, что вы просто не должны сравнивать их на равенство.
Представьте:
Close[1] = 1.31933
New_Bar
Tick1, Bid = 1.31935
Тик2, Bid = 1.31934
Тик3, Bid = 1.31937
Тик4, Bid = 1.31937
Тик5, Bid = 1.31942
Ваш код действительно ищет тик, где Bid равен 1.31936
Вы пропустите свой сигнал. Этого не произойдет, если вы используете > .
Я могу иметь +1 без проблем result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Это не делает его намного лучше. Все ваши расчеты в Points должны быть Pips, насколько я понимаю. Однако, у меня нет опыта работы с ECN брокерами, так что это может сработать.
Это не неправильно, но не идеально, и в худшем случае это не то, что вы хотите внутри цикла. Лучше всего, даже не начинайте использовать циклы от 0 до OrdersTotal. Читайте здесь: Циклы и закрытие или удаление заказов
ОЧЕНЬ ХОРОШАЯ СТАТЬЯ! Я должен прочитать их в самом начале :)
Согласен и есть еще много очень хороших статей, написанных тем же автором. Также книга - неплохое место для начала.
У меня Admiral Market Bid = 1,29000 Ask = 1,29001. Это проблема, которую я знаю, но у меня нет решения на данный момент, я не нашел хороший пример.
На сайте вашего брокера указано, что для EURUSD минимальный спред составляет 0,1. Средний спред составляет 0,5. <-- Это означает в пунктах! То есть 0,1 - это 1 пункт. 0,5 - это 5 пунктов.
Так что в вашем случае один пипс - это 10*пункт. Спред запутает все ваши мини-расчеты, где вы добавляете только 3 пункта к цене.
Наберите в поисковике "adjust for 5 digit broker" и вы найдете много примеров.
ПРИВЕТ :)
Если этот код был плох, потому что я передавал сигналы, то он улучшился.Я подумал , что проблема совсем в другом месте, а не в знаке равенства '=='......... '>=' лучше, конечно.
Вопрос 1. Должен ли я использовать MyPips в свече, в этой функции? bool BULL4()
Проблема с цифрами.
Я нашел вот это
https://www.mql5.com/en/forum/140097 by WHRoeder
https://www.mql5.com/en/forum/123736 by WHRoeder
Что такое Digit ? в https://docs.mql4.com/predefined/variables/digits и https://docs.mql4.com/convert/doubletostr
Поскольку вы эксперт, я должен был сказать кое-что, это может быть важно.
Сейчас я используюплатформу MT4 и вижу 4 цифры после запятой (Bid-Ask= 0.0001 обычно). На данный момент мы запрограммировалина MQL4, пусть так и будет.
В MT5 я вижу5 цифр после запятой.разница между MQL4 иMQL5. На данный момент это различие не имеет для менязначения. Важно,чтобы наш советник работал хорошо.
Я не хочу в данный момент говорить об этом (если это не необходимо).
И Я НАПИСАЛ ПРОГРАММУ для меня это хорошо :) как насчет Вас?