Çaydanlıktan gelen sorular - sayfa 33

 
Renat :
ben>=0
Teşekkür ederim. Yazık oldu bana.)) Bu numaralandırmayı mql4'te çok kullandım ve bu kadar basit bir anda hata yaptım.
 

Konum seçilemiyor. Örneğin:

   double Stop_Loss   = NormalizeDouble ( OrderGetDouble ( ORDER_SL ), _Digits );
   double Open_Price  = NormalizeDouble ( OrderGetDouble ( ORDER_PRICE_OPEN ), _Digits );
   
   double Amount_Risk = 0.0 ;
         
   for (count = PositionsTotal ()- 1 ; count >= 0 ; count--)
      {
       if ( PositionSelect ( SymbolName (count, true )))
         {
           int tp_pos;
          tp_pos = ( ENUM_ORDER_TYPE ) PositionGetInteger ( POSITION_TYPE );
           if (tp_pos == ORDER_TYPE_BUY || tp_pos == ORDER_TYPE_SELL ) 
            {
             Amount_Risk = MathAbs (Open_Price - Stop_Loss);
             Print ( "PositionTotal(): " , PositionsTotal (), " Amount_Risk: " ,Amount_Risk);
            }
           if ( GetLastError () != 0 ) Print (ErrorDescription( GetLastError ()), ", " , GetLastError ());
         }
      }

Günlükte hata:

Nasıl doğru yapılır?

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
Торговые функции / PositionSelect - Документация по MQL5
 
tol64 :

Konum seçilemiyor. Örneğin:

Öncelikle hatayı düzeltin, emir tipi ile pozisyon tipini karıştırmayın:

 tp_pos = ( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE );
 
tol64 :

Konum seçilemiyor. Örneğin:

Günlükte hata:

Nasıl doğru yapılır?

Nerede hata yapmadığını sorsan daha kolay olur..

Her şeyin çalışması için tasarım

if ( PositionSelect ( SymbolName (count, true ))) şu şekilde değiştirilmelidir:

if ( PositionSelect ( PositionGetSymbol (sayım)))

ve ENUM_ORDER_TYPE ile karıştırdığınız metnin daha aşağısında ENUM_POSITION_TYPE

 
Rosh :

Öncelikle hatayı düzeltin, emir tipi ile pozisyon tipini karıştırmayın:

Vladix:

Nerede hata yapmadığını sorsan daha kolay olur..

Teşekkür ederim ve gerçekten büyük hatalarım için özür dilerim. Bu geçici bir olgudur ve yakında bu yanlış anlama geçecektir.))
 

Lütfen bana bu sorunu nasıl çözeceğimi söyleyin:

İki bilgisayarda MT5 için Uzman Danışmanlar, kitaplıklar ve göstergeler geliştiriyorum.

Gelişmelerin bir makineden diğerine transferini organize etmenin en kolay yolu nedir? tercihen otomatik senkronizasyon ile. Onlar. böylece en son dosya makineler tarafından alınır ve çoğaltılır.

Bilgisayarlar aynı ağ üzerindedir. İnternet üzerinden paylaşılan bir paylaşılan klasör var.

 
VCS kullan
 
TheXpert :
VCS kullan
Bilgisayarların Windows7'de olduğunu belirtmedim. En zor şey, dosya sistemindeki dosyaları nasıl doldurduğunu anlamaktır. XP ile her şey açıktı, her şeyin bulunduğu bir dizin vardı, ama burada her şey dağınık.
 
Andrian22 :
Bilgisayarların Windows7'de olduğunu belirtmedim. En zor şey, dosya sistemindeki dosyaları nasıl doldurduğunu anlamaktır. XP ile her şey açıktı, her şeyin bulunduğu bir dizin vardı, ama burada her şey dağınık.
Yardıma bakın Başlarken - Terminali başlatma - "Misafir modu" ( /portable tuşuyla)
 
Vladix :

Nerede hata yapmadığını sorsan daha kolay olur..

Her şeyin çalışması için tasarım

if ( PositionSelect ( SymbolName (count, true ))) şu şekilde değiştirilmelidir:

if ( PositionSelect ( PositionGetSymbol (sayım)))

Çeşitli seçeneklere baktım ve sonuçta hepsinin aynı olduğunu fark ettim. Yani, bu seçeneklerin her biri:

  if ( PositionSelect ( Symbol ()))
  if ( PositionSelect ( PositionGetSymbol (count)))
  if ( PositionSelect ( SymbolName (count, true )))

... aynı sonucu döndürür.

Ve benim durumumda bu, sonucu hiçbir şekilde etkilemedi.))) Komut dosyasını ekledim:

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
 for ( int count = 0 ; count < PositionsTotal (); count++)
   {
     double Amount_Risk = 0.0 ;
     string Type_pos;
    
     if ( PositionSelect ( Symbol ()))
     //if(PositionSelect(PositionGetSymbol(count)))
     //if(PositionSelect(SymbolName(count,true)))
      {
       int tp_pos = ( ENUM_POSITION_TYPE ) PositionGetInteger ( POSITION_TYPE );
       string Symbol_pos = PositionGetSymbol (count);
       double Acc_Blnc   = AccountInfoDouble ( ACCOUNT_BALANCE );
       double Order_Lots = PositionGetDouble ( POSITION_VOLUME );
       double Stop_Loss  = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), _Digits );
       double Open_Price = NormalizeDouble ( PositionGetDouble ( POSITION_PRICE_OPEN ), _Digits );
       
       switch (tp_pos)
         {
           case 0 : Type_pos = "LONG" ;   break ;
           case 1 : Type_pos = "SHORT" ; break ;
         }
       
       Amount_Risk += MathAbs (((((Open_Price - Stop_Loss)* 10000 )*(Order_Lots* 10 ))/Acc_Blnc)* 100 );
       
       Print ( "PositionTotal(): " , PositionsTotal (), ", Symbol: " ,Symbol_pos, ", Position: " ,Type_pos, ", Amount_Risk: " , DoubleToString (Amount_Risk, 2 ), "%" );

       if ( GetLastError () != 0 ) Print (ErrorDescription( GetLastError ()), ", " , GetLastError ()); ResetLastError ();
      }
   }
}

Şimdi her şey doğru çalışıyor. Yukarıda belirtilen seçenekler yorumlanır ve karşılaştırılabilir. Sonuç günlükte her zaman aynıdır: