Tıpkı göründüğü gibi, Sadece birkaç tane daha kaşlı ayraç eklendi:
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
externdouble Lots = 0.1 ;
externstring Сomment = "Pattern_1" ;
externint TakeProfit = 10 ;
externint StopLoss = 0 ;
externint Step = 2 ;
externint StepOtl = 4 ;
externint BULevel = 2 ;
externint NotBULevel = 2 ; // Уровень безубытка в пунктахexternint Slippage = 2 ; // проскальзывание externint Magic = 111 ;
int ticket1, ticket2, bs, ss, bsts, ssts, slms, blms; //добавил колич. ордеров по типам и их тикетыint timeprev;
double price1, price2; //цены открытия ордеров//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
return ( 0 );
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
double SL,TP;
int slv=MarketInfo( Symbol (),MODE_STOPLEVEL);
if (Step<=slv || StepOtl<=slv) { Print ( "Step или StepOtl слишком мал" ); return ( 0 );}
CountTrades(); //подсчет ордеров по типам.
BU();
//если нет рыночных ордеров-----------------------------------------if (bs+ss+bsts+ssts+blms+slms== 0 )
{
if (Open[ 1 ]>Close[ 1 ] && Open[ 2 ]<Close[ 2 ] && High[ 1 ]>High[ 2 ] && Low[ 1 ]<Low[ 2 ]) // продажа
{
TP= NormalizeDouble (Bid - TakeProfit * Point , Digits );
SL= NormalizeDouble (Bid + StopLoss* Point , Digits );
if (TakeProfit== 0 ) TP= 0 ;
if (StopLoss== 0 ) SL= 0 ;
ticket1= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage,SL,TP, "Pattern_1" ,Magic, 0 ,Red); //Сразу с тейк-профитом, магик в настройкахif ( OrderSelect (ticket1,SELECT_BY_TICKET,MODE_TRADES)) price1=OrderOpenPrice(); //цена первого ордера
SL= NormalizeDouble (Bid+StepOtl* Point -StopLoss* Point , Digits );
if (StopLoss== 0 ) SL= 0 ;
ticket2= OrderSend ( Symbol (),OP_BUYSTOP,Lots, NormalizeDouble (Bid+StepOtl* Point , Digits ), 0 ,SL, 0 , "Pattern_1" ,Magic, 0 ,Blue); //тикет для BuyStopif ( OrderSelect (ticket2,SELECT_BY_TICKET,MODE_TRADES)) price2=OrderOpenPrice(); //цена второго ордера
}
if (Open[ 1 ]<Close[ 1 ] && Open[ 2 ]>Close[ 2 ] && High[ 1 ]>High[ 2 ] && Low[ 1 ]<Low[ 2 ]) // покупка
{
TP= NormalizeDouble (Ask + TakeProfit * Point , Digits );
if (TakeProfit== 0 ) TP= 0 ;
SL= NormalizeDouble (Ask-StopLoss* Point , Digits );
if (StopLoss== 0 ) SL= 0 ;
ticket1= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage,SL,TP, "Pattern_1" ,Magic, 0 ,Blue); //с тейком, магик в настройках if ( OrderSelect (ticket1,SELECT_BY_TICKET,MODE_TRADES)) price1=OrderOpenPrice(); //цена первого ордера
SL= NormalizeDouble (Bid-StepOtl* Point +StopLoss* Point , Digits );
if (StopLoss== 0 ) SL= 0 ;
ticket2= OrderSend ( Symbol (),OP_SELLSTOP,Lots, NormalizeDouble (Bid-StepOtl* Point , Digits ), 0 ,SL, 0 , "Pattern_1" ,Magic, 0 ,Red); //тикет для SellStopif ( OrderSelect (ticket2,SELECT_BY_TICKET,MODE_TRADES)) price2=OrderOpenPrice(); //цена второго ордера
}
}
return ( 0 );
}
//+------------------------------------------------------------------+void CountTrades() // количество открытых ордеров
{
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic) //отделяем свои ордера. Магик задается в настройках
{
int typ=OrderType(); //однократный вызов функции ускоряет работуswitch (typ)
{
case0 : bs++;
case1 : ss++;
case2 : blms++;
case3 : slms++;
case4 : bsts++;
case5 : ssts++;
default : break ;
}
}
}
}
return ;
}
//+------------------------------------------------------------------+void BU()
{
for ( int a= OrdersTotal ()- 1 ; a>= 0 ; a--)
{
if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber()!=Magic || OrderSymbol()!= Symbol ()) continue ;
int typ=OrderType(); //вызываем функцииint tic=OrderTicket(); //один разdouble oop=OrderOpenPrice(); //это ускоряет работуdouble otp=OrderTakeProfit(); //советникаdouble osl=OrderStopLoss();
if (typ==OP_BUY)
{
if (oop<= NormalizeDouble (Bid-BULevel* Point -NotBULevel* Point , Digits ) && oop>osl) // последнеее условие БУ + 20 пипсов
OrderModify(tic,oop, NormalizeDouble (oop+NotBULevel* Point , Digits ),otp, 0 ,Green);
OrderDelete(ticket2,Yellow);
}
if (typ==OP_SELL)
{
if (oop>= NormalizeDouble (Ask+BULevel* Point +NotBULevel* Point , Digits ) && (oop<osl || osl== 0 )) // последнеее условие БУ + 20 пипсов
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel* Point ,OrderTakeProfit(), 0 ,Red);
OrderDelete(ticket2,Yellow);
}
}
}
return ;
}
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
Bu nerede değerlendirilir?
bs+ss+bsts+ssts+blms+slms
Onlar küresel. Ve kontrole kadar sıfırlanmazlar. Ve kontrol etmeden önce hesaplamaları - nerede?
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
Remake BU, piyasa pozisyonlarını silmek imkansız ve asılı durma nedeniyle daha fazla pozisyon olmayacak)))
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
evillive : Remake BU, piyasa pozisyonlarını silmek imkansız ve asılı durma nedeniyle daha fazla pozisyon olmayacak)))
BU() işlevinde aranın (yorumlanan) burada gerekli olup olmadığını guruların abonelikten çıkmasına izin verin ve bu işlevin orada çağrılıp çağrılmadığını Alexey1979621'in düşünmesine izin verin?
Ayrıca CountTrades(); yani OrdersTotal() ile eşdeğerdir, daha basit ve daha hızlıdır.
void BU()
{
bool bu= false ;
for ( int a= OrdersTotal ()- 1 ; a>= 0 ; a--)
{
if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber()==Magic || OrderSymbol()== Symbol ())
{
int typ=OrderType(); //вызываем функцииint tic=OrderTicket(); //один разdouble oop=OrderOpenPrice(); //это ускоряет работуdouble otp=OrderTakeProfit(); //советникаdouble osl=OrderStopLoss();
if (typ==OP_BUY)
{
if (oop<= NormalizeDouble (Bid-BULevel* Point -NotBULevel* Point , Digits ) && oop>osl) // последнеее условие БУ + 20 пипсов
OrderModify(tic,oop, NormalizeDouble (oop+NotBULevel* Point , Digits ),otp, 0 ,Green);
bu= true ;
//break;
}
if (typ==OP_SELL)
{
if (oop>= NormalizeDouble (Ask+BULevel* Point +NotBULevel* Point , Digits ) && (oop<osl || osl== 0 )) // последнеее условие БУ + 20 пипсов
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel* Point ,OrderTakeProfit(), 0 ,Red);
bu= true ;
//break;
}
if (bu== true && (typ==OP_BUYSTOP || typ==OP_SELLSTOP))
{
OrderDelete(tic,Yellow);
bu= false ;
}
}
}
}
return ;
}
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.
kaynak
Neden mevduat saymak? Peki BU(); kimdir?
Birinin konumunu diğerlerininkinden "ayırmak" için tuhaf bir yöntem, daha iyi değil mi?
Neden mevduat saymak? Peki BU(); kimdir?
Birinin konumunu diğerlerininkinden "ayırmak" için tuhaf bir yöntem, daha iyi değil mi?
BU(); başabaş işlevi.
Sürümüm neden kötü?
сюда пересчёт рыночных позиций и отложекVe benim durumumda nasıl görünecek?Ve benim durumumda nasıl görünecek?
Tıpkı göründüğü gibi, Sadece birkaç tane daha kaşlı ayraç eklendi:
Tıpkı göründüğü gibi, Sadece birkaç tane daha kaşlı ayraç eklendi:
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
İyiliğe gelince - bu su üzerinde bir dirgen. Çabuk gelince - ayrıca iki büyükanne ... Ve eğer ucuzsa - 1. maddeye bakın.
Sonra şöyle:
1. İyi hakkında - sudaki bir dirgen. 2. Çabuk hakkında - ayrıca iki büyükanne ... 3. Ve eğer ucuzsa - 1. maddeye bakın.
Şimdi net!
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
Bu nerede değerlendirilir?
Onlar küresel. Ve kontrole kadar sıfırlanmazlar. Ve kontrol etmeden önce hesaplamaları - nerede?Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
Düzeltildi, derlendi, test edildi - sorun kaldı - Belirli bir durum oluştuğunda, danışman bir anlaşma açar ve buna göre Zararı Al veya Durdur ile kapatır. Hepsi bu, danışman, anlaşma açma koşullarının yerine getirilmesine rağmen artık anlaşma açmıyor.
İşte kodun tamamı.
Remake BU, piyasa pozisyonlarını silmek imkansız ve asılı durma nedeniyle daha fazla pozisyon olmayacak)))
BU() işlevinde aranın (yorumlanan) burada gerekli olup olmadığını guruların abonelikten çıkmasına izin verin ve bu işlevin orada çağrılıp çağrılmadığını Alexey1979621'in düşünmesine izin verin?
Ayrıca CountTrades(); yani OrdersTotal() ile eşdeğerdir, daha basit ve daha hızlıdır.