2 EMA çapraz EA yaptı, tavsiyeye ihtiyacım var - sayfa 4

 
prupru :

Şimdi daha büyük bir sorunum var, brokerim emirleri kısmen yerine getirme eğiliminde.

Sayın Müşteri,

Lütfen ticaretinizin 587.318 fiyatından kısmen açıldığını (15.84 üzerinden 2.32 lot) dikkate alınız.

Bu konuyla ilgili başka sorularınız varsa, bizimle iletişime geçmekten çekinmeyin.

Saygılarımla,

Komisyoncu.

İşte destek ne diyor:

Yüksek oynaklık veya düşük likidite dönemlerinde Limit Emirlerinin kısmen uygulanabileceğini lütfen unutmayın. Bu, fiyatın karşılanması durumunda pozisyonun hemen tamamen veya kısmen doldurulacağı anlamına gelir. Siparişinizin kısmen yerine getirilmesi durumunda, bu nedenle tebligat mektubu aldınız.

Kısmen kapalı olmalarına rağmen tüm siparişleri nasıl kapatacağımı anlıyorum, OrdersTotal()> 0 iken Tüm Siparişleri Kapat yapmam gerekiyor, ancak siparişler kısmen açıldığında henüz ne yapacağımı bilmiyorum.

Düzenle:

Doğru Sembol ve sihirli sayı siparişlerini kontrol etmem gerektiğini yeni fark ettim, bu biraz daha zor

edit: işte kısmi kapanışta bile emirleri kapatması gereken tüm emirleri kapat fonksiyonu


 //Close all my Orders
void CloseAllOrders()
{
int notMyOrders = 0 ;

 while ( OrdersTotal ()>notMyOrders)
 {
 notMyOrders = 0 ;
 for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false )         break ;
   if ( OrderMagicNumber ()!=MagicNumber || OrderSymbol ()!= Symbol ()) {notMyOrders++; continue ;}
   if ( OrderType ()<= 1 )CloseOrder();
         
   }
 }
return ;
}  
yeniden yazılmış
 
deVries :

yeniden yazılmış


vay!

bu benim için biraz zor, almadan önce 4 veya 5 kez okudum. Teşekkürler!

ve... OrderSelect false döndürürse ne olur?

orderselect ne sıklıkla false döndürür? Bu mümkün mü?

 
prupru :


vay!

bu benim için biraz zor, almadan önce 4 veya 5 kez okudum. Teşekkürler!

ve... OrderSelect false döndürürse ne olur?

orderselect ne sıklıkla false döndürür? Bu mümkün mü?


 for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
   {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false )         break ;

ben = 0

döngüden geri gelir

ben = -1

if ( OrderSelect (-1, SELECT_BY_POS , MODE_TRADES )== false ) break ; // ==> döngüyü kırdığımız işlemleri kontrol etmeyi sonlandır

sonraki CloseOrder()

 //CloseOrder
void CloseOrder()
{ double PR= 0 ;
 while (! IsTradeAllowed ()) Sleep ( 10 );
 RefreshRates ();
 if ( OrderType ()== OP_BUY )  PR= Bid ;
 if ( OrderType ()== OP_SELL ) PR= Ask ;
 if (! OrderClose ( OrderTicket (), OrderLots (),PR,Slippage,CLR_NONE))
  {
   Print ( "Close order error: " ,GetLastError());
   Print ( "Type " , OrderType (), " PR " ,PR, " Ask " , Ask , " Bid " , Bid , " OrderTicket " , OrderTicket (), " OrderLots " , OrderLots ());
  }
return ;}
//--------------------------- end of close order

GetLastError() işlevinden hangi yaygın hatalar döndürülebilir?

Kapatma başarısız olursa, bir sonraki işlem, ticaret bağlamı çok meşgul veya başka bir hata gibi bir hata için de başarısız olabilir...

peki bu durumların birçoğundan kaçınarak ne yapabilirsin ??

 
deVries :


peki bu durumların birçoğundan kaçınarak ne yapabilirsin ??

henüz bilmiyorum. Bunu düşünmek zorundayım.

Şu anda başka bir sorunla sıkışıp kaldım.

EA'mı bir Windows 2003 VPS'ye koydum ve şimdi "zaman aşımı ile sonlandırıldı" hatası veriyor, ancak ev bilgisayarımda hiç böyle bir hata görmedim.

Ve hata, kapalı ve açık sipariş döngülerimin çalıştığı sırada değil, ancak uzman geçiş olup olmadığını kontrol edip boşta kaldığında ortaya çıkıyor.

Demek istediğim, program yeni çubuğun açılmasını kontrol eder, traceingstop = 0 yani izleyen durdurma işlevi çağrısı yok, o zaman yeni çubuk açılırsa EMA çaprazını kontrol eder, kesişme yok (zaman aşımı hataları aldığım zamanlar EMA satırlarının geçişten uzak olduğu zamanlar) , böylece program döner (0)

Döngü yok! Zaman aşımı ile nasıl sonlandırılabilir?

 
prupru :

henüz bilmiyorum. Bunu düşünmek zorundayım.

Şu anda başka bir sorunla sıkışıp kaldım.

EA'mı bir Windows 2003 VPS'ye koydum ve şimdi "zaman aşımı ile sonlandırıldı" hatası veriyor, ancak ev bilgisayarımda hiç böyle bir hata görmedim.

Ve hata, kapalı ve açık sipariş döngülerimin çalıştığı sırada değil, ancak uzman geçiş olup olmadığını kontrol edip boşta kaldığında ortaya çıkıyor.

Demek istediğim, program yeni çubuğun açılmasını kontrol eder, traceingstop = 0 yani izleyen durdurma işlevi çağrısı yok, o zaman yeni çubuk açılırsa EMA çaprazını kontrol eder, kesişme yok (zaman aşımı hataları aldığım zamanlar EMA satırlarının geçişten uzak olduğu zamanlar) , böylece program döner (0)

Döngü yok! Zaman aşımı ile nasıl sonlandırılabilir?


bu bir döngü değil mi?

 while (! IsTradeAllowed ()) Sleep ( 10 );
 
deVries :


bu bir döngü değil mi?


Demek istediğim, EA'nın sonlandırıldığı sırada EMA satırları kesişmekten çok uzaktı, bu nedenle bir NewOrder işlevi çağrılmadı, bu nedenle bahsettiğiniz döngü (NewOrder işlevinin içinde) çalıştırılmadı.

IsStopped koşulu eklendi

 while ( (! IsTradeAllowed ()) && (! IsStopped ()) ) Sleep ( 10 );
 while ( (LotRemains> 0 ) && (! IsStopped ()) )
 while ( ( OrdersTotal ()> 0 ) && (! IsStopped ()) ) 
 
belki VPS işlemci kaynaklarım bittiği için zaman aşımı hatası ortaya çıkıyor. Daha pahalı bir plana geçtim ve windows uodate gibi ağır bir şey çalıştırana kadar onları göremiyorum