Açık ticareti kontrol etme sorunları - sayfa 5

 
BrotherPyrus :
Hey Daz & Co,

hothand, beş basamaklı MT4'te çalışır, ancak dört basamaklı bir platformda çalışmaz.
Nasıl çalışmadığı konusunda daha spesifik olabilir misiniz?
 
BrotherPyrus :
hothand, beş basamaklı MT4'te çalışır, ancak dört basamaklı bir platformda çalışmaz. Buna neyin sebep olduğu ve nasıl düzeltileceğine dair herhangi bir ipucu var mı?
EA'lar 4/5 basamak, TP, SL ve kaymaya göre ayarlanmalıdır. ECN brokerlerinde önce açmanız ve SONRA durakları ayarlamanız gerekir.
 //++++ These are adjusted for 5 digit brokers.
int      pips2points;     // slippage  3 pips    3=points    30=points
double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int      Digits .pips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)
int      init(){
     if ( Digits == 5 || Digits == 3 ){     // Adjust for five (5) digit brokers.
                pips2dbl    = Point * 10 ; pips2points = 10 ;   Digits .pips = 1 ;
    } else {    pips2dbl    = Point ;    pips2points =   1 ;   Digits .pips = 0 ; }
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
 
   if (iBarHour >= iOpenHour && iBarHour <= iOpenHour + iBarsToTrade && Tradeopen()==false) // Check if time is ok to trade & no trade is open
                  {

                          
                               //  if(High[2]>High[1] && Low[2]<Low[1]) // see if we have an inside bar
                                 if ( iHigh (hothand(), 60 , 2 )> iHigh (hothand(), 60 , 1 ) && iLow (hothand(), 60 , 2 ) < iLow (hothand(), 60 , 1 )) // see if we have an inside bar
                                 {                                                                                                     // on the hothand pair
                                           
                                         // IB found 
                                         if ( iHigh (hothand(), 60 , 1 ) > dDayOpenPrice) // IB high on hothand pair is greater than day open price bullish signal
                                          {
                                             int     buyspread= MarketInfo (hothand(),MODE_SPREAD);
                               double buyentry =   iHigh (hothand(), 60 , 1 ) + 10 + buyspread;   //Low of prev bar + 1 pip + spread
                               double buystop = iLow (hothand(), 60 , 1 ) - 10 ;     //Low of prev bar - 1 pip
                               double buytpx1 = iHigh (hothand(), 60 , 1 )+( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 )); //1:1 r:r
                               double buytpx3 = iHigh (hothand(), 60 , 1 )+( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 ))* 3 ; // 1:3 r:r
                              
                              
                           OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
                           OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx3, "DIBSBUY" , Mnumber3);
                            }
                            
                         if ( iLow (hothand(), 60 , 1 ) < dDayOpenPrice) // IB low on hothand pair is lower than day open price bearish signal
                            {
                               int     sellspread= MarketInfo (hothand(),MODE_SPREAD);
                               double sellentry = iLow (hothand(), 60 , 1 )- 10 ; //Low of prev bar - 1 pip 
                               double sellstop = iHigh (hothand(), 60 , 1 )+ 10 + sellspread; // High of prev bar + 1 pip + Spread
                               double selltpx1 = iLow (hothand(), 60 , 1 )-( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 )); //1:1 r:r
                               double selltpx3 = iLow (hothand(), 60 , 1 )-( iHigh (hothand(), 60 , 1 )- iLow (hothand(), 60 , 1 ))* 3 ; // 1:3 r:r
                              
                              
                           OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
                           OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx3, "DIBSSELL" ,Mnumber3);   //Open Sell Order
               
                                      } 
                        }
                               
                   }
     //  
  
    
      }

tamam döndüm,


Bu, kodumun işlemlerin yürütüldüğü kısmı, şu an için sadece 5 basamakla çalışacağım. Buradaki fikir, gün için hangi çiftin ticaret yapmak için en iyi olduğunu seçmek için hothand fonksiyonumu kullanmam. Bu kod, 1 saatlik grafikte bir iç çubuk taraması yapmalıdır. ( Hothand işlevi, btw çiftinin bir dizisini döndürür) Bir iç çubuk bulduğunda, test amacıyla düz bir alım veya satım ticareti açmasını sağladım. Backtester'ın 1 grafikten birden fazla çift ticareti yapabileceğinden emin değilim? Kullandığı tüm çiftler için 1 dakikalık geçmişi indirdim. Ama sadece iliştirdiğim grafik olan eurusd'da işlem açıyor gibi görünüyor,

WHRoeder, uğradığınız ve tekrar yardım ettiğiniz için teşekkür eder. Peki bir adet ticaret açmak için doğru yol, onu açmak, sonra geri dönüp açıldıktan sonra sl ve tp'yi doldurmak mı? Bu kodda yanlış olan milyonlarca şeyi de görebileceğinize eminim.

 
  1. OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
    

    4/5 basamak için kaymayı ayarlamıyor. ECN uyumlu değil

    NEDEN çalışmadığını öğrenmek için her zaman dönüş kodlarını test edin

     int ticket = OrderSend ( Symbol (),OP_BUY, 1 , Ask, 3 , buystop, buytpx1, "DIBSBUY" , Mnumber1);   //Open buy order
    if (ticket < 0 ) Alert ( "OrderSend [1] failed: " , GetLastError ());

  2. buystop = iLow (hothand()...
    Duraklarınız hothand() çiftine dayalıdır, ancak Symbol() ile bir sipariş açıyorsunuz. Aynı değillerse, duraklar tamamen sahtedir
 
dazamate :

tamam döndüm,


Bu, kodumun işlemlerin yürütüldüğü kısmı, şu an için sadece 5 basamakla çalışacağım. Buradaki fikir, gün için hangi çiftin ticaret yapmak için en iyi olduğunu seçmek için hothand fonksiyonumu kullanmam. Bu kod, 1 saatlik grafikte bir iç çubuk taraması yapmalıdır. ( Hothand işlevi, btw çiftinin bir dizisini döndürür) Bir iç çubuk bulduğunda, test amacıyla düz bir alım veya satım ticareti açmasını sağladım. Backtester'ın 1 grafikten birden fazla çift ticareti yapabileceğinden emin değilim? Kullandığı tüm çiftler için 1 dakikalık geçmişi indirdim. Ama sadece iliştirdiğim grafik olan eurusd'da işlem açıyor gibi görünüyor,


Bazı genel yorumlar:

Ask'ta alırsın ve Bid'de satarsın

komisyoncunuz ECN tipi bir komisyoncuysa, siparişi verirken SL ve TP ayarlayamazsınız (bu durumda onları 0'a ayarlayın), siparişi vermeniz ve ardından SL & TP'yi eklemek için siparişi değiştirmeniz gerekir.

her zaman sipariş vermenin sonucunu kontrol edin ve iade edilen hataları kontrol edin, buna göre hareket ederek bunları halletmeniz gerekecektir.

Bu EA'yı birden fazla çizelgede kullanmayı planlıyorsanız, yani birden çok çizelgeden Siparişler yerleştirmeyi planlıyorsanız, Sipariş İçeriği Meşgul'den kaçınmak için bir tür Mutex'e ihtiyacınız olacaktır (WHRoeder'ın gönderilerine bakın, mükemmel bir Mutex'i var)

 
Damm WHRoeder, haklısın "duraklarımız hothand() çiftine dayanıyor ama Symbol() ile sipariş açıyorsun" bunu fark etmemiştim. Ne kadar aptalsın. Bu şeyler, siz onu öğrenmeye çalışırken zihinsel olarak çok yorucu oluyor. Ama evet aptal. Bu karmaşayı aştığın için teşekkürler. Muhtemelen bir ara vereceğim ve yarın taze bir zihinle döneceğim. Onlara işaret ettiğin şeyleri düzelteceğim.
 
dazamate :

Ama sadece iliştirdiğim grafik olan eurusd'da işlem açıyor gibi görünüyor,

Evet, . . .

 OrderSend ( Symbol (),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order

Sembol (), EA/Göstergenin bağlı olduğu çifttir, bunun yerine bunu mu yapmak istediniz?

 OrderSend ( hothand() ,OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
 

Evet bunu yapmak istemiştim ama şimdi bu hatayı alıyorum


http://clip2net.com/s/144hq


Hothand işlevinin çift çıktısını tanımıyor gibi. Hothand işlevinin çıktısı bir dizedir, bu yüzden neyin işe yaramayacağını anlamıyorum

 
dazamate :
Hothand işlevinin çift çıktısını tanımıyor gibi. Hothand işlevinin çıktısı bir dizgedir, bu yüzden neyin işe yaramayacağını anlamıyorum
 OrderSend (hothand(),OP_SELL, 1 , Ask, 3 , sellstop, selltpx1, "DIBSSELL" ,Mnumber1);   //Open Sell Order
  1. Ask/Bid, geçerli Symbol() fiyatıdır, ancak başka bir çift açmaya çalışıyorsunuz. Sahte fiyat.
  2. Diğer TF/çiftleri için test cihazından çubuk sıfır değerleri alamazsınız
  3. Test cihazında, IIRC'de diğer çiftlerin işlemlerini açamazsınız.
  4. OrderSend işlevi için bilinmeyen sembol adı USDCHF
    O ipi nereden buluyorsun? Mevcut grafik aynı kalıp mı yoksa USD,EUR veya USD/EUR veya USDEURm veya USDEURfxf vb.
  5. SADECE mevcut çifti takas etmenizi öneririm. hothand() geçerli değilse, işlem yapılmaz. Test cihazında bu şekilde çalışır, EA'yı her zaman diğer çiftlere yerleştirebilir, böylece hangi çiftlerin takas ettiğini kontrol edebilirsiniz ve tüm tuzaklardan kaçınırsınız.
 

Hey millet, aşağıdakileri yapan bir kod yapmaya çalışıyorum


 extern string   sComment4                = "Max Hours allowed before pending orders are deleted" ;
extern int      pendinglimit        = 4 ;

// * EVERYTIME A TRADE GETS TRIGGERED 

bartraded = TimeHour ( TimeCurrent ());


// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 

   if ( TimeHour ( TimeCurrent ()) > bartraded + pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
     {
         for ( int tnumber = OrdersTotal ()- 1 ; tnumber >= 0 ; tnumber--)   //scan through open orders
        {
           if ( OrderSelect (tnumber, SELECT_BY_POS) &&   
           OrderType ()==(OP_BUYSTOP||OP_SELLSTOP) &&     // The order selected is either a pending buy on stop order or a buy on sell order
             OrderMagicNumber ()==(Mnumber1||Mnumber3))     // The orders magic number is the same as the magic number used in this ea
          
               {
                 OrderSelect (tnumber, SELECT_BY_POS);     // Select order
                 OrderDelete (tnumber);                     // Delete it
               }
        }
     }

x bar sayısı için bekleyen bir emir açılmışsa, bar sayısı x'i aşmışsa silin


Belki mantığımda bir sorun olabilir?