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

 
Sahte! Afedersiniz!
Benzeri tarafından ayarlanmışsa, benzersiz sipariş numarası nasıl takip edilir? Nasıl değiştirilir?
 
Link_x :

Örneğimde: rastgele sipariş numarası , hacim - 5, kapanış fiyatı, kayma 0, ok yok.
Dokümantasyon örneğinde: sipariş numarasının order_id, hacim 1, kapanış fiyatına göre hesaplanması, kayma 3 ile ok kırmızıdır.

Akıllı gözleme, ancak bir şey var, Vurgulanana bakın, Symbol() 'u yazıyorsunuz.

Ve kod, "Nasıl?", sadece

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)   //
    {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
       {
     if ( OrderType ()== OP_BUY ) price= Bid ;
     else                     price= Ask ;
     OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
       }
    }    
Bunun gibi bir şey
 
r772ra :
Bunun gibi bir şey

Vay! Şimdi pozisyonları kapatıyor , ama anında. Bunu yapalım:
 if ( AccountProfit () > 50 )
{
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
{
if ( OrderType ()== OP_BUY ) price= Bid ;
else                     price= Ask ;
OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
}
}   
}

Ve tüm pozisyonları 50$'lık potansiyel kârla kapatan bir kod alıyoruz.
Çok teşekkürler!
Şimdi her şey açık!
sınıf! :)
 
Merhaba! Akıllı insanlara yardım edin. Kar=10 puan ayarladım (yani, iki çift için toplam kâr 10 puana eşit olduğunda), her iki açık anlaşma da kapatılmalıdır. Ancak, anlaşmalar kapalı değil. Hata nerede?
 extern double lotAU= 0.01 ;
extern double lotEA= 0.01 ;
extern double Profit= 10 ;
extern string Сomment           = "KVAZ_EURAUD_AUDUSD" ;
extern int Magic                = 1111 ;

int EASell, EABuy, AUSell, AUBuy;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
double prof;
double bidEA = MarketInfo ( "EURAUD" , MODE_BID );
double askEA = MarketInfo ( "EURAUD" , MODE_ASK );
double bidAU = MarketInfo ( "AUDUSD" , MODE_BID );
double askAU = MarketInfo ( "AUDUSD" , MODE_ASK );

string symEA = "EURAUD" ;
string symAU = "AUDUSD" ;

for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
 OrderSelect (i, SELECT_BY_POS );
 prof=prof+ OrderProfit ();
 Print ( "Profit=" +prof);
}
if (prof>=Profit)
{
 for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   OrderSelect (i, SELECT_BY_POS );
   OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 , 0 );
 }
}

double LineEA = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ); // Первый инструмент
double LineAU = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

if (NumberOfPositions( "EURAUD" )== 0 && LineEA > 0.1 && LineAU < - 0.1 )
    {
       EASell = OrderSend (symEA, OP_SELL ,lotEA,bidEA, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "AUDUSD" )== 0 && LineEA > 0.1 && LineAU < - 0.1 )
    {
       AUSell = OrderSend (symAU, OP_SELL ,lotAU,bidAU, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "EURAUD" )== 0 && LineEA < - 0.1 && LineAU > 0.1 )
    {
       EABuy = OrderSend (symEA, OP_BUY ,lotEA,bidEA, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "AUDUSD" )== 0 && LineEA < - 0.1 && LineAU > 0.1 )
    {
       AUBuy = OrderSend (symAU, OP_BUY ,lotAU,bidAU, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
    
   return ( 0 );
  }
//+------------------------------------------------------------------+

int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1111 ) {       //|  Параметры:                                                                |
                                                                   //|    sy - наименование инструмента   (""   - любой символ,                   |
                                                                   //|                                     NULL - текущий символ)                 |
                                                                   //|    op - операция                   (-1   - любая позиция)                  |
                                                                   //|    mn - MagicNumber                (-1   - любой магик)                    
   int i, k= OrdersTotal (), kp= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) kp++;
          }
        }
      }
    }
  }
   return (kp);
}

Entelektüel olarak anlıyorum ki, danışman kapanırken, kapatması gereken sembol ve sihirle verilen emirleri görmez. Ve tüm............

Evet, başka bir seçenek vardı. İşlem sadece bir tane kapatılırken, 10 puanlık kar şartı gözlenmedi. Kısacası tam bir saçmalık.

 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
 OrderSelect (i, SELECT_BY_POS );
 prof=prof+ OrderProfit ();
 Print ( "Profit=" +prof);
}
if (prof>=Profit)
{
 for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   OrderSelect (i, SELECT_BY_POS );
  {
   if ( OrderSymbol ()!= Symbol ()  || OrderMagicNumber ()!=Magic) continue ;
   OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 , 0 );
  }
 }
}
 
Merhaba! Lütfen bana (tercihen bir kod örneği ile) nasıl yapacağımı söyleyin, böylece grafikte, mevcut çubukta ve cari fiyatta belirli koşullara ulaşıldığında, bir ok belirir ve bir kez bir uyarı tetiklenir, mesaj verir mi? Örneğin: hareketler aşağıdan yukarıya çaprazlandığında, sırasıyla "al" mesajıyla birlikte bir yukarı ok ve "sat" mesajıyla birlikte yukarıdan aşağıya bir ok belirdi. Şimdiden teşekkürler.
 
alexey1979621 :
Merhaba! Akıllı insanlara yardım edin. Kar=10 puan ayarladım (yani, iki çift için toplam kâr 10 puana eşit olduğunda), her iki açık anlaşma da kapatılmalıdır. Ancak, anlaşmalar kapalı değil. Hata nerede?

Entelektüel olarak anlıyorum ki, danışman kapanırken, kapatması gereken sembol ve sihirle verilen emirleri görmez. Ve tüm............

Evet, başka bir seçenek vardı. İşlem sadece bir tane kapatılırken, 10 puanlık kar şartı gözlenmedi. Kısacası tam bir saçmalık.


1. Açıldığı enstrümanın talep veya teklifinde pozisyonu kapatın

ve OrderClosePrice() yöntemindeki gibi değil

böyle yaz

 if (prof>=Profit)
   {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;

       OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
         }
      }   
   }
Bunun gibi bir şey
 
Durma olasılığı vardır ve bundan sonra bayrakları orijinal durumlarına sıfırlamanız gerekir. Bu sorun , danışman grafikten çıkarılarak çözülür mü?
 
r772ra :

1. Açıldığı enstrümanın talep veya teklifinde pozisyonu kapatın

ve OrderClosePrice() yöntemindeki gibi değil

böyle yaz

Bunun gibi bir şey

Yaptım ama yukarıdaki baykuşla ilgili sorunu çözmüyor. Kapatırken, danışmanın kapatması gereken sembol ve sihirle emirleri görmediğini düşünüyorum.
 
alexey1979621 :
Merhaba! Akıllı insanlara yardım edin. Kar=10 puan ayarladım (yani, iki çift için toplam kâr 10 puana eşit olduğunda), her iki açık anlaşma da kapatılmalıdır. Ancak, anlaşmalar kapalı değil. Hata nerede?

Entelektüel olarak anlıyorum ki, danışman kapanırken, kapatması gereken sembol ve sihirle verilen emirleri görmez. Ve tüm............

Evet, başka bir seçenek vardı. İşlem sadece bir tane kapatılırken, 10 puanlık kar şartı gözlenmedi. Kısacası tam bir saçmalık.

Hata üstüne hata. Belki şöyle bir şey işe yarar:

 extern double lotAU= 0.01 ;
extern double lotEA= 0.01 ;
extern double Profit= 10 ;
extern string EXP_Comment           = "KVAZ_EURAUD_AUDUSD" ;
extern int Magic                = 1111 ;

int EASell, EABuy, AUSell, AUBuy;
string gsa_SMB[ 2 ];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[ 0 ] = "EURAUD" ;
  gsa_SMB[ 1 ] = "AUDUSD" ;
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
     int     li_N;
     double prof = 0 ., ld_Price = 0 .;

     for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
    {
        OrderSelect (i, SELECT_BY_POS );
        li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
        if (li_N < 0 ) continue ;
        if ( OrderMagicNumber () != Magic) continue ;
        prof += OrderProfit ();
         Print ( "Profit=" , prof);
    }
     if (prof>=Profit)
    {
         for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
             OrderSelect (i, SELECT_BY_POS );
            li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
            if (li_N < 0 ) continue ;
            if ( OrderMagicNumber () != Magic) continue ;
            if ( OrderType () == OP_BUY ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID );
            else if ( OrderType () == OP_SELL ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK );
             OrderClose ( OrderTicket (), OrderLots (), ld_Price, 5 );
        }
    }
     double bidEA = MarketInfo ( "EURAUD" , MODE_BID ),
           askEA = MarketInfo ( "EURAUD" , MODE_ASK ),
           bidAU = MarketInfo ( "AUDUSD" , MODE_BID ),
           askAU = MarketInfo ( "AUDUSD" , MODE_ASK ),
           LineEA = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ), // Первый инструмент
           LineAU = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

     if (NumberOfPositions (gsa_SMB[ 0 ], -1, Magic) == 0 )
    {
         if (LineEA > 0.1 ) if (LineAU < - 0.1 )
        {EASell = OrderSend (gsa_SMB[ 0 ], OP_SELL , lotEA, bidEA, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
         if (LineEA < - 0.1 ) if (LineAU > 0.1 )
        {EABuy = OrderSend (gsa_SMB[ 0 ], OP_BUY , lotEA, askEA, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
    }
     if (NumberOfPositions (gsa_SMB[ 1 ], -1, Magic) == 0 )
    {
        if (LineEA < - 0.1 ) if (LineAU > 0.1 )
        {AUBuy = OrderSend (gsa_SMB[ 1 ], OP_BUY , lotAU, askAU, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
        if (LineEA > 0.1 ) if (LineAU < - 0.1 )
        {AUSell = OrderSend (gsa_SMB[ 1 ], OP_SELL , lotAU, bidAU, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
    }
     return ( 0 );
}
//+------------------------------------------------------------------+
int fGet_NumSymbol ( string fs_Symbol, string ar_SMB[])
{
     for ( int li_IND = 0 ; li_IND < 2 ; li_IND++)
    { if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (- 1 );
}
//+------------------------------------------------------------------+

???

 
alexey1979621 :
Yaptım ama yukarıdaki baykuşla ilgili sorunu çözmüyor. Kapatırken, danışmanın kapatması gereken sembol ve sihirle emirleri görmediğini düşünüyorum.


Ne sembolü ne de sihirbazı görmemelidir, danışmanınızda her şey doğru yazılmıştır. Loglara bakın ne hata veriyor.