Trailingstop EA çalışmayacak - sayfa 3

 
FMIC : Bazı tavsiyeler; "Sor" veya "Teklif" kullanmayın - bunun yerine "OrderClosePrice()" kullanın. Al veya Sat emri olmasına bakılmaksızın gerçek zamanlı bir değerdir.
Gerçek zamanlı değil.
  1. Ask ve Bid ile gecikmelerden sonra, yani birden çok sunucu çağrısı arasında, Uyku veya uzun bir hesaplamadan sonra RefreshRates() yapmanız gerekir.
  2. OrderClosePrice ile yalnızca OrderSelect ile güncellenir . Bu nedenle, Uyku veya uzun bir hesaplamadan sonra (veya OnTick çağrıları arasında bir sırayı seçtikten sonra), yeniden seçim yapmanız gerekir.
     OrderSelect (OrderTicket(), SELECT_BY_TICKET); // Refresh OrderClosePrice
 
WHRoeder :
Gerçek zamanlı değil.
  1. Ask ve Bid ile gecikmelerden sonra, yani birden çok sunucu çağrısı arasında, Uyku veya uzun bir hesaplamadan sonra RefreshRates() yapmanız gerekir.
  2. OrderClosePrice ile yalnızca OrderSelect ile güncellenir . Bu nedenle, Uyku veya uzun bir hesaplamadan sonra (veya OnTick aramaları arasında bir sırayı seçtikten sonra), yeniden seçim yapmanız gerekir.

Bilgi için teşekkürler. "OrderClosePrice()" öğesinin arabelleğe alındığını bilmiyordum. Bu yüzden ne "OrderClosePrice()" ne de "Sor"/"Teklif" ideal gerçek zamanlı çözüm değildir.

Ancak, "OrderSelect()" yapıldıktan sonra "OrderClosePrice()" öğesinin "Sor"/"Teklif" kullanımından daha iyi bir genel çözüm olduğunu kabul ediyor musunuz?

Ve Gerçek Zamanlı bir çözüm için, eğer gerçekten gerekliyse, sanırım alternatiflere geri dönebiliriz:

  • "OrderSelect()" ile Siparişi Yeniden Seçmek (EDIT: bunu siz belirtmiş olsanız bile ilk gönderide bunu listelemeyi unuttum)
  • "Sor"/"Teklif" ile "RefreshRate()"
  • "MODE_ASK"/"MODE_BID" ile "MarketInfo()" (eski MQL4 Stili)
  • "SYMBOL_ASK"/"SYMBOL_BID" ile "SymbolInfoDouble()" (yeni stil MQL4+ ve MQL5)
  • "SymbolInfoTick()" (ki zaten EA'larımın çoğunda zaten kullanıyorum)
 
FMIC : Ancak, "OrderClosePrice()" öğesinin "OrderSelect()" yapıldıktan sonra "Sor"/"Teklif" kullanımından daha iyi bir genel çözüm olduğunu kabul ediyor musunuz?
kesinlikle.
 

Neden tekerleği yeniden icat etmeye çalışıyorsun?

Buraya bakın - ihtiyacınız olan her şeyi bulacaksınız.

Kaynak kodunu değiştirmeye başlamazsa.

 

Şimdiye kadarki herkesin yardımları için teşekkür ederim. Sanırım şimdi 130 numaralı hatayı çözdüm, ancak OrderSelect işlevimde ciddi bir sorun var, bu yüzden büyük olasılıkla yalnızca bazı siparişleri bazen değiştiriyor. Aşağıda yazdırdığım şeylerin bir listesi var. OrderTicket # tamamen yanlış. Bu bilet numarası EURAUD için açtığım bir işleme ait. Tüm sonuçları dahil etmemiş olsam da, aslında OrderTicket numaralarının ticaret terminalindeki çifte karşılık gelmediği birden fazla Çift var.

Birisi lütfen bir göz atıp OrderSelect ile ilgili sorunun ne olduğunu bana bildirebilir mi? Teşekkür ederim

2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: bilet = 0 Biletin OrdersTotal ile aynı değeri yazdırması gerektiğini düşünüyorum, bu yüzden sayacım çalışmıyor gibi görünüyor.

2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: OrderSelect = true

2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: Sipariş Toplamı = 11

2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbypos = 0

2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbyticket = 1

2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: OrderTicket = 50213357

 extern int TrailingStart= 12 ;
extern int TrailingStop= 5 ;
double stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
int TS=TrailingStart-TrailingStop;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init(){
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit(){
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
   double Pip= Point * 10 ;
   int ticket= 0 ;
   if (TS<stoplevel) TrailingStart=( int )stoplevel+TrailingStop+ 2 ;
   
   Print ( "OrdersTotal = " , OrdersTotal ());
   Print ( "OrderSelect = " , OrderSelect (OrderTicket(),SELECT_BY_TICKET));
   Print ( "ticket = " ,ticket);                     
   Print ( "OrderTicket = " ,OrderTicket());                     
   Print ( "Selectbyticket = " ,SELECT_BY_TICKET);                     
   Print ( "Selectbypos = " ,SELECT_BY_POS);                     
                        
   { for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){ //I added more curly brackets{}
       if ( OrderSelect (i,SELECT_BY_POS)){
      ticket++;{
         if (OrderSymbol()== _Symbol ){
             if (OrderType()==OP_BUY){
               if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
                   if ((Bid-OrderOpenPrice())>(TrailingStart*Pip)){ //For now, I have changed back to Bid and Ask and will include OrderClosePrice() later on.
                     if (TrailingStop*Pip<Bid-(TrailingStop*Pip)){ //I have added TrailingStop*Pip before the '<'
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue)) //I removed the !
                         return ( 0 ); //I replaced the Getlasterrror with a return value
                        RefreshRates();
                        }     
                    }  
                }     
            }  
             if (OrderType()==OP_SELL){
               if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
                   if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
                     if (TrailingStop*Pip>Ask+(TrailingStop*Pip)){
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
                         return ( 0 );
                        RefreshRates();
                       }
                    }
                }  
            }
         }
      } 
   }
}  
   return ( 0 );
}
//+------------------------------------------------------------------+



 

Herkese selam. Tüm yardımlar için teşekkürler. Hatayı buldum ve sorunlar çözüldü. Stoploss kullanmadığım için, OrderStopLoss()'un değeri her zaman 0'dır. Bu, satın alma emrini değiştirirken bir sorun değildir, çünkü 0 her zaman Bid-TrailingStop*Pip'ten küçüktür. Ancak satış emri ile 0 asla Ask+Trailingstop*Pip'den fazla olamaz. Bu yüzden bu satıra or(|| OrderStopLoss()) eklemek zorunda kaldım:

 if (OrderType()==OP_SELL){
               if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
                   if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
                     if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ) { //Added OrderStopLoss()==0
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
 
Trader3000 : Bu bilet numarası EURAUD için açtığım bir işleme ait.
OrderSelect döngünüzde filtreleme yok. Başka bir ayrı grafiğe başka bir para birimi eklendiğinde, Sembol Ordersymbol'a eşit değil. - MQL4 forumu
 
WHRoeder :
Trader3000 : Bu bilet numarası EURAUD için açtığım bir işleme ait.
OrderSelect döngünüzde filtreleme yok. Başka bir ayrı grafiğe başka bir para birimi eklendiğinde, Sembol Ordersymbol'a eşit değil. - MQL4 forumu

Yardımın için çok teşekkür ederim. Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum. Bu hatayı gösterir:

'MySelect' - işlev yalnızca genel kapsamda bildirilebilir İzleyen_v26.mq4 31 13

ve 31. satır şudur:

 bool     MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){

İşte tüm EA:

 #property strict ;
extern int TrailingStart= 10 ;
extern int TrailingStop= 5 ;
double stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
int TS=TrailingStart-TrailingStop;
bool     MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init(){
   if (TS<stoplevel){
       MessageBox ( "Please note: Your inputs for TrailingStart and/or TrailingStop cannot" +
                 "\nbe less than the minimum levels required by your broker and the" +
                 "\nTrailingStart has been increased automatically to " + StringConcatenate (stoplevel+TrailingStop)+ " pips" );
     } 
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit(){
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
   double Pip= Point * 10 ;
   if (TS<stoplevel) TrailingStart=( int )stoplevel+TrailingStop;
           
     bool     MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){
     if (! OrderSelect (iWhat, eSelect, ePool))     return ( false );
     if (OrderSymbol()      != _Symbol )           return ( false );
     if (ePool != MODE_HISTORY)                   return ( true );
     return (OrderType() <= OP_SELL);
}
     for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
     if (MySelect(i, SELECT_BY_POS)){

     for ( int iPos=OrdersHistoryTotal()- 1 ; iPos >= 0 ; iPos--)
     if (MySelect(iPos, SELECT_BY_POS, MODE_HISTORY)){
         int nextTkt = OrderTicket();
     
               if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
                   if ((Bid-OrderOpenPrice())>(TrailingStart*Pip)){
                     if (OrderStopLoss()<Bid-(TrailingStop*Pip)){
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue))
                         Print ( "Buy = " , GetLastError ());
                         return ( 0 );
                        RefreshRates();
                        }     
                     }  
                  }     
               }
               if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
                   if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
                     if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ){
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
                         Print ( "Sell = " , GetLastError ());
                         return ( 0 );
                        RefreshRates();
                        }
                     }
                  }  
               }
            
         
         
   return ( 0 );
}
//+------------------------------------------------------------------+



 
Trader3000 :

Evet, OrderSelect'te kesinlikle bir sorun var çünkü sadece bazı grafiklerde çalışıyor. Diğer sorun ise, işlemler manuel olarak yapıldığından MagicNumber ekleyemem. Kodun alakalı olduğunu düşündüğüm kısmını kullandım, ancak derlemesini sağlayamıyorum.

Sana, üzerine inşa edebileceğin, problemlerini çözen ve hatta ondan önce onları listeleyen mükemmel bir iskelet kodu verdim, ama sen onu görmezden gelmeyi seçiyorsun ve kodunun neden istediğini yapmadığını merak etmeye devam ediyorsun!

Niye ya? Kodunuzun çalışmamasını mı istiyorsunuz? Örneği kullanın ve kendiniz test edin!

 
Sadece kesip yapıştırabileceğini ve kodlamayı öğrenmek zorunda olmadığını düşünüyor. Bu basit hatayı bile sormadan çözemez:
'MySelect' - işlev yalnızca genel kapsamda bildirilebilir İzleyen_v26.mq4 31 13
Neden: