[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 237

 

Merhaba.

Söyleyin bana, aşağıdaki durumun nedeni ne olabilir (testçi başlangıçta bilet 15'te bir hata verdi, ancak daha sonra bu siparişi yine de kapattı)? Buna daha fazla dikkat etmeli miyim?

Şimdiden teşekkür ederim.

 
nemo811 :

Daha fazla dikkat etmeli miyim?


kesinlikle. herhangi bir hata olmamalıdır.
 

yardım etmenizi rica ederim.

Burada bir hata mı var? (Kod, son piyasa SATIŞ emrinin biletini döndürür)

 int OrdTicketSell_b( int MAGIC)
 {
   string SMB= Symbol ();
   int OrdTicketSell= 0 ;
   int i;
   for (i= 0 ;i< OrdersTotal ();i++)
   {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true)
     {
       if ( OrderSymbol ()==SMB)
       {
         if ( OrderMagicNumber ()==MAGIC || OrderMagicNumber ()== 777 )
         {
           if ( OrderType ()==OP_SELL)
           {
            OrdTicketSell= OrderTicket ();
           }  
         }  
       }          
     }
   }
   if ( OrderTicket ()!= OrdTicketSell) OrderSelect (OrdTicketSell, SELECT_BY_TICKET);
   return (OrdTicketSell);
 }

Şimdiden teşekkür ederim.

 
int OrdTicketSell_b(int MAGIC)
 {
  string SMB=Symbol();
  int OrdTicketSell=-1;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_SELL)
           {
            OrdTicketSell=OrderTicket();
           }  
         }  
       }          
     }
   }
   if(OrderTicket()!= OrdTicketSell && OrdTicketSell>=0) OrderSelect(OrdTicketSell, SELECT_BY_TICKET);
   return(OrdTicketSell);
 }
 

Tünaydın.

İlginç bir an: mql4'te bloğun sonundaki değişken { int var; } yok edilmez, bu nedenle soru, bir döngüde bir değişken bildirmenin doğru olup olmadığıdır???

Misal:

for(int i = 0; ben < 500; ben ++)

{

int var; // yinelemeler sırasında değişkene ne olur?

}

Teşekkür ederim.

 
sergeev :

Hayır - henüz tam olarak anlaşılmamış görünüyor. Aynı hata çıkıyor.

Kodun son kısmı kedi ile kalır. ilgili olabilir:

     int SchSell=SchSell_b(MAGIC);
     int OrdTicketSell=OrdTicketSell_b(MAGIC);
     double MinLot= MarketInfo (SMB,MODE_MINLOT);

     if (ChastZakr)
      {
       if (SchSell> 1 )
        {  
         OrderClose (OrdTicketSell, OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK),Proskalz, CLR_NONE );
         Alert (SMB, ": произведено частичное закрытие Sell-позиции, тикет: " ,OrdTicketSell, "." );
        }   
       else
        {  
         if (SchSellLots>MinLot)
          { 
           OrderClose (OrdTicketSell, NormalizeDouble ( OrderLots ()/ 2 , 2 ), MarketInfo ( OrderSymbol (), MODE_ASK),Proskalz, CLR_NONE );
           Alert (SMB, ": произведено частичное закрытие Sell-ордера, тикет: " ,OrdTicketSell, "." );
          }  
        }  
      }

En ilginç şey, bir siparişi kapatma girişimi olduğunda hatanın ortaya çıkmasıdır, cat. ondan önce limitli bir tüccardı, ancak daha sonra çalıştı ve bir pazar oldu. Sipariş kapalıysa, kedi. başlangıçta pazardı - hata oluşmaz.

 

Bir hata buldum, işte çözüm:

     int SchSell=SchSell_b(MAGIC);
     double MinLot= MarketInfo (SMB,MODE_MINLOT);

     if (ChastZakr)
      {
       int OrdTicketSell=OrdTicketSell_b(MAGIC);
       if (SchSell> 1 )
        {  
         OrderClose (OrdTicketSell, OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK),Proskalz, CLR_NONE );
         Alert (SMB, ": произведено частичное закрытие Sell-позиции, тикет: " ,OrdTicketSell, "." );
        }   
       else
        {  
         if (SchSellLots>MinLot)
          { 
           OrderClose (OrdTicketSell, NormalizeDouble ( OrderLots ()/ 2 , 2 ), MarketInfo ( OrderSymbol (), MODE_ASK),Proskalz, CLR_NONE );
           Alert (SMB, ": произведено частичное закрытие Sell-ордера, тикет: " ,OrdTicketSell, "." );
          }  
        }  
      }
 
nemo811 :

Bir hata buldum, işte çözüm:


Aptalca bir soru sorabilir miyim? Garip bir normalleşme

 OrderClose (OrdTicketSell, NormalizeDouble ( OrderLots ()/ 2 , 2 ), MarketInfo ( OrderSymbol (), MODE_ASK),Proskalz, CLR_NONE );

Bunun neden yapıldığını anlayamıyorum.

 
Vinin :


Aptalca bir soru sorabilir miyim? Garip bir normalleşme

Bunun neden yapıldığını anlayamıyorum.

Bu, 0,03 lotunun izin verilen minimum 0,01 ile ilgili olması durumunda geçerlidir. 0.03'ü 2'ye bölerken, anladığım kadarıyla kabul edilemez olan 0.015 elde ederiz. O yüzden böyle bir normalleştirme yaptım.

Kesinlikle yargılamayın - sadece öğreniyorum))). Ama bu bir hataysa, lütfen beni düzeltin.

 
artmedia70 :
Başlayın ve size yardımcı olacağız. Ve "benim için yap" gibi görünüyor. İhtiyacınız olan hemen hemen her şey orada. Döngüde sadece siparişlerinizde alımlar ve duraklar yapmak için kalır.

siparişler şu şekilde açılır:

                ticketSell = OpenPendingOrderSell( 1 , Lots, SellLimit, slip, SellLimit, 0 , 0 , EAName + "-" + NumOfTradesSell, MagicNumber, 0 , HotPink );
                 if (ticketSell < 0 )
                {
                         Print ( "Error: " , GetLastError ());
                         return ( 0 );
                }

Komut dosyasını böyle bir kayıp olmadan hesaplamak istiyorum:

Eğer

 if (totalBuy > 1 )
{ то ордерам ticketBuy присвоить цену без убытка + TakeProfitBuy, при достижении этой цены или ниже, закрыть ордера}

я думаю, что можно что то в роде такого сделать:

if (totalBuy > 1 && (без убыток + TakeProfitBuy) >= Bid)
{
CloseAllBuy();
}

Eğer

 if (totalSell > 1 && (без убыток + TakeProfitSell) <= Ask)
{
CloseAllSell();
}

Eğer

 if (totalSell > 1 && totalBuy > 1 && (без убыток + TakeProfitSell) >= Ask)
{
CloseAllBuy();
CloseAllSell();
}

Bu satır tanımlama kodunu EA'ya kayıpsız olarak nasıl doğru bir şekilde ekleyeceğim:

 int start()
{
   int b,s;
   double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs;
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
      {   if ( OrderSymbol ()== Symbol ())
         {
            price = OrderOpenPrice ();
            lot   = OrderLots ();
             if ( OrderType ()==OP_BUY ) 
               {price_b = price_b+price*lot; b++;  lot_b=lot_b+lot;}
             if ( OrderType ()==OP_SELL) 
               {price_s = price_s+price*lot; s++;  lot_s=lot_s+lot;}
   }  }  }
   ObjectDelete ( "SLb" );
   if (b!= 0 ) 
   {  SLb = price_b/lot_b;
       ObjectCreate ( "SLb" , OBJ_ARROW , 0 ,Time[ 0 ],SLb, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLb" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLb" , OBJPROP_COLOR , Navy );
   }
   ObjectDelete ( "SLs" );
   if (s!= 0 ) 
   {  SLs = price_s/lot_s;
       ObjectCreate ( "SLs" , OBJ_ARROW , 0 ,Time[ 0 ],SLs, 0 , 0 , 0 , 0 );                     
       ObjectSet    ( "SLs" , OBJPROP_ARROWCODE , 6 );
       ObjectSet    ( "SLs" , OBJPROP_COLOR , Maroon );
   }
}
Neden: