Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 46

 
Renat Akhtyamov :
int ticket;//тикет ордера
..........
ticket= OrderSend (.....);//приказ и запоминаем тикет ордера
if (ticket> 0 )//открылась
{
//действия с тикетом
}

Daha doğrusu şöyle olurdu:

if (ticket!=- 1 ) //открылась
{
//действия с тикетом
}

OrderSend - "Ticaret sunucusu tarafından siparişe atanan biletin numarasını veya başarısız olursa -1'i döndürür. "

Test cihazında bile ilk bilet 0 değil 1 numaradır.

 
Oksana Berenko :

Daha doğrusu şöyle olurdu:

if (ticket!=- 1 ) //открылась
{
//действия с тикетом
}

OrderSend - "Ticaret sunucusu tarafından siparişe atanan biletin numarasını veya başarısız olursa -1'i döndürür. "

Test cihazında bile ilk bilet 0 değil 1 numaradır.

Eksik Oksana'yı gördüğüme çok sevindim))

Evet, biletler test cihazında ve DC sunucusunda 1 ile başlar, ancak DC'de asla 1'i yakalayamazsınız. Versiyonunuz tam olarak çalışmıyor, eşitsizliği -1 ile karşılaştırmak doğru değil. Gerçek hesap 1234567 döndürürse ne olur?

if (ticket> 0 ) //открылась
{
//действия с тикетом
}


// так верно
 

Yani test cihazında, gerçek hayatta birden fazla bilet olamaz, hatta daha fazlası

sıfır birden küçüktür, her iki koşul da doğrudur, yalnızca biri karşılaştırma için, diğeri istisna içindir.

Bunu yapmaya alışmış olmama rağmen:

// Открываем ордер
       int ticketbuy = OrderSend (sy, OP_BUY ,ll, MarketInfo (sy, MODE_ASK ),Slippage, 0 , 0 ,Comments,mn, 0 ,BuyColor);
         if (ticketbuy< 0 )
         Print (sy, " OpenPosition. OrderSend Buy fail #" , GetLastError ());
         else
         Print (sy, " OpenPosition. OrderSend Buy successfully" );

Ama benimki hesaba katılsa bile şartlar doğru, sadece mantık farklı)

 
İyi akşamlar Herkese Mutlu Yıllar .. Lütfen bana bu kod parçasında yanlış olan ne olduğunu söyleyin?Köy kapandığında, satın alma da kapanır.
void CloseOrder( int type)
  {
   bool ret;
   int error= 0 ;
   double price= 0.0 ;
   int total= OrdersTotal ();
   if (!disabled( _Symbol ))
     {
       Print (rezult);
       return ;
     }
   for ( int i=total- 1 ; i>= 0 ; i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderType ()> 1 ) continue ;
       if ( OrderType ()!=type) continue ;
       int digits=( int ) SymbolInfoInteger ( OrderSymbol (), SYMBOL_DIGITS );
       if ( OrderType ()== OP_BUY )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_BID ),digits);
       if ( OrderType ()== OP_SELL )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_ASK ),digits);

       if ( NormalizeDouble (NormalizePrice( OrderSymbol (),price),digits)!=price) continue ;
      ret= OrderClose ( OrderTicket (), OrderLots (),price,Slippage, clrLawnGreen );
       if (!ret)
        {
         error= GetLastError ();
         rezult= StringConcatenate ( OrderSymbol (), ": error close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()), " №- " ,error, " " ,ErrorDescription(error));
         Print (rezult);
        }
       else
        {
         rezult= StringConcatenate ( OrderSymbol (), ": close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()));
         Print (rezult);
        }

     }
  }
 
Movlat Baghiyev :
İyi akşamlar Herkese Mutlu Yıllar .. Lütfen bana bu kod parçasında yanlış olan ne olduğunu söyleyin?Köy kapandığında, satın alma da kapanır.

Kökteki mantığı değiştirmenizi tavsiye ederim

Yani, açık siparişlerin kaydını tutmak gerekir - kaç satış açık, kaç hikaye açık

Ve ancak o zaman, bu düşüncelere dayanarak siparişleri yönetin - açın ve kapatın

 

Tüm yaklaşan ile!

Yardım istiyorum, danışmanın neden çok fazla sipariş açtığını, açılma durumunda gecikme olmaması gerekiyorsa ve açtıktan sonra tekrar açtığını anlamıyorum. Döngüde bir sorun olduğundan şüpheleniyorum? döngüleri anlamıyorum

for(int i=OrdersTotal()-1;i>=0;i--)

if( OrderSelect (i,SELECT_BY_POS))

if(OrderMagicNumber()==magic) // Bizim Sihrimiz ise

{

if(OrderType()==OP_BUY) sdel_b++; // Satın alınanları say

if(OrderType()==OP_SEL) sdel_s++; // Köyleri say

if(OrderType()==OP_BUYSTOP) otl_b++; // Gecikmeli durakları say

if(OrderType()==OP_SELLSTOP) otl_s++; // Bekleyen satış noktalarını hesapla

}


// Şimdi açık siparişler

if (Saat()==00 && Dakika()==01 && otl_b==0 && otl_s ==0); // Zamanı geldiyse ve gecikme yoksa

{

OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // gecikmeleri koy

OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //

}

 
wishmast :

Hepsi geliyor!

Yardım istiyorum, danışmanın neden çok fazla sipariş açtığını, açılma durumunda gecikme olmaması gerekiyorsa ve açtıktan sonra tekrar açtığını anlamıyorum. Döngüde bir sorun olduğundan şüpheleniyorum? döngüleri anlamıyorum

for(int i=OrdersTotal()-1;i>=0;i--)

if(SiparişSeçimi(i,SELECT_BY_POS))

if(OrderMagicNumber()==magic) // Bizim Sihrimiz ise

{

if(OrderType()==OP_BUY) sdel_b++; // Satın alınanları say

if(OrderType()==OP_SEL) sdel_s++; // Köyleri say

if(OrderType()==OP_BUYSTOP) otl_b++; // Gecikmeli durakları say

if(OrderType()==OP_SELLSTOP) otl_s++; // Bekleyen satış noktalarını hesapla

}


// Şimdi açık siparişler

if (Saat()==00 && Dakika()==01 && otl_b==0 && otl_s ==0); // Zamanı geldiyse ve gecikme yoksa

{

OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // gecikmeleri koy

OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //

}

böyle dene

   sdel_b= 0 ;
   sdel_s= 0 ;
   otl_b= 0 ;
   otl_s= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderMagicNumber ()==magic) // Если наш Меджик
           {
             if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
             if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
             if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
             if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
           }
        }
     }

....
 
Sergey Gritsay :

böyle dene

   sdel_b= 0 ;
   sdel_s= 0 ;
   otl_b= 0 ;
   otl_s= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderMagicNumber ()==magic) // Если наш Меджик
           {
             if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
             if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
             if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
             if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
           }
        }
     }

....
hala çok sayıda sipariş açar
148 Açık ve bekleyen emirlerin sayısı, komisyoncu tarafından belirlenen limite ulaştı.
 
wishmast :
hala çok sayıda sipariş açar
148 Açık ve bekleyen emirlerin sayısı, komisyoncu tarafından belirlenen limite ulaştı.
Kodun tamamını gönderin, nerede hata yaptığınızı anlamak zor
 

Selamlar. Hepsi NG ile!

Yürütmeden sonra bir Expert Advisor'ı optimize etmeye çalıştığınızda, sonuçlar ve optimizasyon grafiği boş ve günlük girişi şu şekilde olur:

Optimizasyon sırasında 2 geçiş yapıldı , 2 sonuç önemsiz olarak reddedildi

" genetik algoritma " seçeneğinin işaretini kaldırmak yardımcı olmuyor. Sonuçların testçi için önemsiz göründüğünü anlıyorum, ancak orada ne olduğunu nasıl görebilirim? Ve bu, dönem danışmanının, aynı dönem (yıl) için test sırasında boşalmamasına, ancak +/-% 20 sürmesine rağmen.