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

 


İyi günler, lütfen bana söyleyin - Böyle bir sorunum var: Robot bir pozisyona giriyor ve bir sonraki tıklamada stop loss önceki düşük seviyenin altında değişiyor ve stoploss'un sadece mumun üzerinde durduğu mum olduğunda değiştirilmesine ihtiyacım var. pozisyon açıldı kapandı

 void TrailingStop()
{  
   for ( int i= 0 ;i< OrdersTotal ();i++)
  {
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true );
    {
     if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
      {  
       if (OrderType()==OP_BUY)             
        {              
             double LOW_1 = iLow( NULL , 0 , 1 );       
             bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(), 0 ,White);                
             if (!res)   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
             double HIGH_1 = iHigh( NULL , 0 , 1 );                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(), 0 ,White);                
             if (!res)   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());          
        }                      
      }
    } 
  }     
 return ;                   
}
 

veya bu hatadan nasıl kurtulurum


 
remjte :
Beyler iyidir! Bir pozisyon açmak için yeterli marj yoksa danışmanı test etmeyi bırakacak kodu söyle.
Teşekkür ederim!
AccountFreeMarginCheck() belirli bir değerden küçükse (örneğin, AccountFreeMargin'in %50'sinden az) - alım satım işlevinden çıkın , boş döngüler neredeyse yüklenmediğinden test hızlı bir şekilde sona erer.
 
evillive :
AccountFreeMarginCheck() belirli bir değerden küçükse (örneğin, AccountFreeMargin'in %50'sinden az) - alım satım işlevinden çıkın, boş döngüler neredeyse yüklenmediğinden test hızlı bir şekilde sona erer.

Dürüst olmak gerekirse, hala çok yeşil, bu kod parçasını buldum, nasıl düzelteceğimi söyleyebilir misiniz?

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if ( GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
dönüş(l_lots_4);

 
Daha basit bir şekilde yazacağım: böyle bir koşul nasıl yazılır - Yeni bir mum görünene kadar açık bir siparişi değiştirmeyin
 
zhezheria :
Daha basit bir şekilde yazacağım: böyle bir koşul nasıl yazılır - Yeni bir mum görünene kadar açık bir siparişi değiştirmeyin
İlgili zaman diliminde yeni bir çubuk açmaya çalışın. Karanlık kod örnekleri
 
remjte :

Dürüst olmak gerekirse, hala çok yeşil, bu kod parçasını buldum, nasıl düzelteceğimi söyleyebilir misiniz?

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) (-2);
dönüş(l_lots_4);

Neden kural, ve öyle yapacak. Kendi değişken adlarınızı değiştirmediğiniz sürece.

Ancak daha küçük bir riske ihtiyacınız varsa, o zaman if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - bu durumda, belirtilen lot ile bir pozisyon açtıktan sonra %50 veya daha az serbest teminat olacaksa, geri dönün (-1)

 
Lütfen bana söyle. Listedeki ikinci sıranın seçileceği ve ardından silineceği (ertelenmiş) kodun bir bölümünü yazmanız gerekir. OrderSelect (1, SELECT_BY_POS, MODE_TRADES) olduğunda 4051 döndürür
 
remjte :
Beyler iyidir! Bir pozisyon açmak için yeterli marj yoksa danışmanı test etmeyi bırakacak kodu söyle.
Teşekkür ederim!
       // проверяем доступность свободных средств
       if (AccountFreeMarginCheck( Symbol (),OP_BUY,OpenLot)<= 0 || GetLastError ()== 134 )
            {
               Print ( "It is impossible to open the order Buy, not enough money." );
               return ( 0 );
            }
       // проверяем доступность свободных средств
       if (AccountFreeMarginCheck( Symbol (),OP_SELL,OpenLot)<= 0 || GetLastError ()== 134 )
            {
               Print ( "It is impossible to open the order Sell, not enough money." );
               return ( 0 );
            }
doube OpenLot; // Лот который вы хотите открыть.
Bir piyasa emri açmadan önce bunu ekleyin.
 
Pomid :
Lütfen bana söyle. Listedeki ikinci sıranın seçileceği ve ardından silineceği (ertelenmiş) kodun bir bölümünü yazmanız gerekir. OrderSelect(1, SELECT_BY_POS, MODE_TRADES) olduğunda 4051 döndürür
Sipariş sayısı 0'dan başlar. Deneyin, OrderSelect (0, SELECT_BY_POS, MODE_TRADES)