Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 332

 
alexey1979621 :

kaynak



Neden mevduat saymak? Peki BU(); kimdir?

       if (OrderSymbol()!= Symbol () && OrderMagicNumber()!=Magic) continue ; //отделяем свои ордера. Магик задается в настройках

Birinin konumunu diğerlerininkinden "ayırmak" için tuhaf bir yöntem, daha iyi değil mi?

       if (OrderSymbol()= Symbol () && OrderMagicNumber()=Magic) отделяем свои ордера. Магик задается в настройках
        {сюда пересчёт рыночных позиций и отложек}
 
evillive :

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?
 
alexey1979621 :
Ve benim durumumda nasıl görünecek?

Tıpkı göründüğü gibi, Sadece birkaç tane daha kaşlı ayraç eklendi:


 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)
      {
       case 0 : bs++;
       case 1 : ss++;
       case 2 : blms++;
       case 3 : slms++;
       case 4 : bsts++;
       case 5 : ssts++;
       default : break ;
      }
      }        
     }
    }
     return ;  
   }
 
peki arkadaşlar :)
 
evillive :

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ı.

 extern double   Lots             = 0.1 ;
extern string Сomment           = "Pattern_1" ;
extern int TakeProfit           = 10 ;     
extern int StopLoss             = 0 ;   
extern int Step                 = 2 ;   
extern int StepOtl              = 4 ;   


extern int BULevel              = 2 ;
extern int    NotBULevel         = 2 ;         // Уровень безубытка в пунктах

extern int Slippage             = 2 ; // проскальзывание 
extern int 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); //тикет для BuyStop
   if ( 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); //тикет для SellStop
   if ( 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)
      {
       case 0 : bs++;
       case 1 : ss++;
       case 2 : blms++;
       case 3 : slms++;
       case 4 : bsts++;
       case 5 : 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 ;
}
 
artmedia70 :
İ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!

 
alexey1979621 :

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?
 
alexey1979621 :

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)))
 
alexey1979621 :

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ı.



       case 0 : bs++;   break ;
       case 1 : ss++;   break ;
       case 2 : blms++; break ;
       case 3 : slms++; break ;
       case 4 : bsts++; break ;
       case 5 : ssts++; break ;
       default : break ;
 
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 ;
}