Tünaydın. sorunu çözmeye yardımcı olun. M15 mumunda arka arkaya birkaç anlaşma açılır.
Birden fazla işlemin açılmaması gerekmektedir. Danışmanın mantığı, bir önceki sipariş kapanana kadar bir sonraki açılmayacak şekilde düzenlenmiştir, ancak bazen bu kadar uzun bir mum üzerinde bir dizi işlem açılır. Bu durumu önlemek için koda ne eklenmeli?
kod parçacığı:
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+bool bCheckOrders()
{
// Переберем в цикле ордера, для проверки открытых ордеров данным советникомfor ( int i = 0 ; i <= OrdersTotal (); i++)
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
return ( false );
return ( true );
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if (dMA > Open[ 1 ] && dMA < Close[ 1 ]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.return ( true );
return ( false );
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if (dMA < Open[ 1 ] && dMA > Close[ 1 ])
return ( true );
return ( false );
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
// Тикет ордераint iOTi = 0 ;
iOTi = OrderSend ( Symbol (), OP_BUY, LOT(), Ask, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
// Проверим открылся ли ордерif (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError( GetLastError ());
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
// Тикет ордера int iOTi = 0 ;
iOTi = OrderSend ( Symbol (), OP_SELL, LOT(), Bid, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
// Проверим открылся ли ордерif (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError( GetLastError ());
}
//+-----------------------------------------------------------------------------------------------+//| Функция модификации ордера |//+-----------------------------------------------------------------------------------------------+void vOrderModify( int iOTi)
{
int iOTy = - 1 ; // Тип ордераdouble dOOP = 0 ; // Цена открытия ордераdouble dOSL = 0 ; // Стоп Лоссint iMag = 0 ; // Идентификатор советникаdouble dSL = 0 ; // Уровень убыткаdouble dTP = 0 ; // Уровень прибыли// Выберем по тикету открытый ордер, получим некоторые значенияif ( OrderSelect (iOTi, SELECT_BY_TICKET, MODE_TRADES))
{
iOTy = OrderType();
dOOP = OrderOpenPrice();
dOSL = OrderStopLoss();
iMag = OrderMagicNumber();
}
// Если ордер открыл данный советник, то входим в условиеif (OrderSymbol() == Symbol () && OrderMagicNumber() == iMag)
{
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордерif (dOSL == 0 )
{
if (iOTy == OP_BUY)
{
dSL = NormalizeDouble (dOOP - StopLoss * Point , Digits );
dTP = NormalizeDouble (dOOP + TakeProfit * Point , Digits );
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
}
if (iOTy == OP_SELL)
{
dSL = NormalizeDouble (dOOP + StopLoss * Point , Digits );
dTP = NormalizeDouble (dOOP - TakeProfit * Point , Digits );
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
}
}
}
}
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
foo2 true değerini döndürürse, hatayı burada arayın
Fazlalık kod kaldırıldı.
Fazlalık kod kaldırıldı.
her zaman yanlış
Fazlalık kod kaldırıldı.
Aşağı inmek
Aşağı inmek
xs ve işte burada, ancak BEActivate'de () yüzden fazla true arasından, OnTick'te () true yalnızca üç kez göründü :)))
ve bir soru daha...
Derslerden kurtulmak istemiyor musun?
ve bir soru daha...
Derslerden kurtulmak istemiyor musun?
Bu OnCalculate olmadan yapılabilir
OnCalculate() işlevi yalnızca özel göstergelerde çağrılırOnCalculate() işlevi tarafından görüntülenen verilere ihtiyacım var.
Belki birisinin sınıflar aracılığıyla bir uygulaması vardır!OnCalculate() işlevi tarafından görüntülenen verilere ihtiyacım var.
Belki birisinin sınıflar aracılığıyla bir uygulaması vardır!Bu ne anlama geliyor?
Tünaydın. sorunu çözmeye yardımcı olun. M15 mumunda arka arkaya birkaç anlaşma açılır.
Birden fazla işlemin açılmaması gerekmektedir. Danışmanın mantığı, bir önceki sipariş kapanana kadar bir sonraki açılmayacak şekilde düzenlenmiştir, ancak bazen bu kadar uzun bir mum üzerinde bir dizi işlem açılır. Bu durumu önlemek için koda ne eklenmeli?
kod parçacığı: