MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 681

 
Igor Makanu :

muhtemelen böyle, satılık:

kâr= NormalizeDouble ((OrderOpenPrice()-Ask)* MarketInfo (_Symbol, MODE_TICKVALUE )*lot/ Puan , 2 );

Teklif sayısına göre satın almak, yani ( Teklif - OrderOpenPrice())

  Take_Profit =100 pp lot =0.1 Pozisyon T\P tarafından kapatıldığında, döviz cinsinden açık pozisyonun karı ne kadar olacak?

profit= NormalizeDouble (( OrderOpenPrice ()-Тейк_Профит*Point)* MarketInfo ( _Symbol , MODE_TICKVALUE )*lot/ Point , 2 );

bu şekilde çalışmıyor.

 
Vitaly Muzichenko :

Çalıştırmanız gerekir: Lot -> Para -> Mesafe, peki, bir kene maliyeti

Para, sadece bilmen gerekiyor)

 
Vitaly Muzichenko :

Çözüm, komisyonları ve takasları hesaba katmaz. Karda ve maliyetlerde - kayıplarda olduğu gibi noktalarda.

komisyonlar ve takaslarla, OrderProfit()+ OrderCommission()+OrderSwap() formülünü sevmiyorum

yardım, komisyonun puan veya mevduat para biriminde olabileceğini söylüyor, bu formül bunu dikkate almıyor ve test ederken yarardan çok zarar verebilir, ancak bu bir zevk meselesidir.

Gabo :

  Take_Profit =100 pp lot =0.1 Pozisyon T\P tarafından kapatıldığında, döviz cinsinden açık pozisyonun karı ne kadar olacak?

bu şekilde çalışmıyor.

Matematik senin işin değil mi? ;)

ve bunun gibi:

kâr=NormalizeDouble(( Take_Profit *Puan )*MarketInfo(_Symbol,MODE_TICKVALUE)*lot/Puan,2);

kısaltılırsa olur

kâr=NormalizeDouble(lot * Take_Profit * MarketInfo(_Symbol,MODE_TICKVALUE),2);

 
Vitaly Muzichenko :

Bu, hesaplamada OrderProfit() kullanmanız gerektiği anlamına gelir.

Kâr al tetiklendiğinde 20 USD kâr elde edebilmeniz için bir pozisyon açmak için bir emir göndermeden önce gelecekteki pozisyonun lotu nasıl hesaplanır? OrderProfit() burada yardımcı olmaz - henüz pozisyon yok.

Veya başka bir deyişle: 0.1 lot ile açılışta 20 USD kar elde etmek için gelecekteki pozisyonun karını al ne olmalıdır? Ve burada OrderProfit() yardımcı olmaz - aynı nedenden dolayı.

Ve bunu da yapabilirsiniz: 0.1 lot ile açılışta serbest marjın %3'ünden fazla olmayan bir kayıp elde etmek için gelecekteki pozisyonun stop loss ne olmalıdır? Ve burada OrderProfit() yardımcı olmaz - aynı nedenden dolayı.

upd: komisyon ve takas bilinmeden tüm hesaplamalar yaklaşık olacaktır. Bir kuruş veya bir noktaya kadar doğruluğa ihtiyacınız varsa, durdurma emirlerini zaten "yerinde" ayarlamanız gerekecektir.

 
Artyom Trishkin :

Kâr al tetiklendiğinde 20 USD kâr elde edebilmeniz için bir pozisyon açmak için bir emir göndermeden önce gelecekteki pozisyonun lotu nasıl hesaplanır? OrderProfit() burada yardımcı olmaz - henüz pozisyon yok.

Veya başka bir deyişle: 0.1 lot ile açılışta 20 USD kar elde etmek için gelecekteki pozisyonun karını al ne olmalıdır? Ve burada OrderProfit() yardımcı olmaz - aynı nedenden dolayı.

Az önce yazdım ve açmadan önce hesaplamam gerektiğini anladım ve mesajı hemen sildim. ne güzel cevap verdin

Bir keresinde bunu yazmıştım ve komisyon olarak giriş parametrelerine 1 lot başına tutarı girdim.

 
Merhaba, çözemedim lütfen yardım edin. Bu kodda yanlış olan nedir? Yorumda ortalama değeri gösteriyorum ama her tikte artıyor mu? Yardım:-))))
 for (shift = 0 ; shift <= Bars - 1 ; shift++)
  {
      zz = iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , shift);
           if (zz > 0.0 )
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for (ww= 0 ;ww<=nn;ww++){
       if (HZZ[ww]>HZZ[ww+ 1 ]){SredRazmax += HZZ[ww];}     
       if (HZZ[ww]<HZZ[ww+ 1 ]){SredRazmin += HZZ[ww+ 1 ];}
      
       
   Comment ( "Средний размах = " , (SredRazmax-SredRazmin)/nn, "," ,HZZ[ 0 ], "," ,HZZ[ 1 ], "," ,HZZ[ 2 ], "," ,HZZ[ 3 ], "," ,HZZ[ 4 ]); 
 
Dmitry Belov :
her tikte artıyor mu? Yardım:-))))

bu, sunduğunuz kodun her bir işaretine güvendiğiniz ve SredRazmax ve SredRazmin değişkenlerini başlatmadığınız anlamına gelir.

değişkenlerin kullanımdan önce başlatılması iyi bir alışkanlıktır, üniversiteler böyle öğretir, hata arama süresini kısaltır ;)

 

Meslektaşlarım, bu kod gerçek zamanlı olarak doğru şekilde yürütülürken neden strateji test cihazında yürütülmeyi reddediyor? Özellikle OnChartEvent() işlevinden bahsediyoruz. Test cihazında görselleştirme modunda butonlara tıklandığında yürütülmez.

 input double lot= 0.1 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ButtonCreate( "ButtonBuy" , 100 , 100 , 200 , 40 , "Buy" , 15 , clrBlue );
   ButtonCreate( "ButtonSell" , 100 , 200 , 200 , 40 , "Sell" , 15 , clrRed );
   return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   long cid= ChartID ();
   if (id== CHARTEVENT_OBJECT_CLICK && sparam== "ButtonBuy" )
     {
       if ( OrderSend ( _Symbol , OP_BUY ,lot, Ask , 200 , 0 , 0 , NULL , 0 , 0 , clrBlue )==- 1 )
         Print ( "Error: " , GetLastError ());
       ObjectSetInteger (cid, "ButtonBuy" , OBJPROP_STATE , false );
     }
   if (id== CHARTEVENT_OBJECT_CLICK && sparam== "ButtonSell" )
     {
       if ( OrderSend ( _Symbol , OP_SELL ,lot, Bid , 200 , 0 , 0 , NULL , 0 , 0 , clrRed )==- 1 )
         Print ( "Error: " , GetLastError ());
       ObjectSetInteger (cid, "ButtonSell" , OBJPROP_STATE , false );
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| ButtonCreate                                                     | 
//+------------------------------------------------------------------+ 
void ButtonCreate( string name, int x, int y, int width, int height,
                   string text, int font_size, color back_clr)
  {
   long cid= ChartID ();
   int subWind= 0 ;
   ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER ;
   string font= "Cambria" ;
   color text_clr= clrBlack ;
   color border_clr= clrBlack ;
   bool state= false ;
   bool back= false ;
   bool selectable= false ;
   bool selected= false ;
   bool hidden= true ;
   long zorder= 0 ;
   if ( ObjectFind (cid,name)==- 1 )
     {
       ObjectCreate (cid,name, OBJ_BUTTON ,subWind, 0 , 0 );
       ObjectSetInteger (cid,name, OBJPROP_XDISTANCE ,x);
       ObjectSetInteger (cid,name, OBJPROP_YDISTANCE ,y);
       ObjectSetInteger (cid,name, OBJPROP_XSIZE ,width);
       ObjectSetInteger (cid,name, OBJPROP_YSIZE ,height);
       ObjectSetInteger (cid,name, OBJPROP_CORNER ,corner);
       ObjectSetString (cid,name, OBJPROP_TEXT ,text);
       ObjectSetString (cid,name, OBJPROP_FONT ,font);
       ObjectSetInteger (cid,name, OBJPROP_FONTSIZE ,font_size);
       ObjectSetInteger (cid,name, OBJPROP_COLOR ,text_clr);
       ObjectSetInteger (cid,name, OBJPROP_BGCOLOR ,back_clr);
       ObjectSetInteger (cid,name, OBJPROP_BORDER_COLOR ,border_clr);
       ObjectSetInteger (cid,name, OBJPROP_BACK ,back);
       ObjectSetInteger (cid,name, OBJPROP_STATE ,state); 
       ObjectSetInteger (cid,name, OBJPROP_SELECTABLE ,selectable);
       ObjectSetInteger (cid,name, OBJPROP_SELECTED ,selected);
       ObjectSetInteger (cid,name, OBJPROP_HIDDEN ,hidden);
       ObjectSetInteger (cid,name, OBJPROP_ZORDER ,zorder);
     }
  }
//+------------------------------------------------------------------+
 
Oleg Remizov :

Meslektaşlarım, bu kod gerçek zamanlı olarak doğru şekilde yürütülürken neden strateji test cihazında yürütülmeyi reddediyor? Özellikle OnChartEvent() işlevinden bahsediyoruz. Test cihazında görselleştirme modunda butonlara tıklandığında yürütülmez.

Çünkü MT4'te OnChartEvent() test cihazında çalışmıyor. Test cihazındaki düğme durumu bayrağını kontrol edin.
 
Artyom Trishkin :
Çünkü MT4'te OnChartEvent() test cihazında çalışmıyor. Test cihazındaki düğme durum bayrağını kontrol edin.

Peki, teşekkürler! Bu tür şüpheler vardı, ancak yardımda OnChartEvent() 'in test cihazında çalışmadığına dair herhangi bir bilgi bulamadım.