Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1302

 
User_mt5 :

Vladimir Karputov ve ben?)

Kesin olarak söyleyemem ama 0.0 deneyin


Eklendi: MQL5 kullanarak 'INDICATOR_MINIMUM' ve 'INDICATOR_MAXIMUM' iptal etmek imkansız görünüyor.

 
Vladimir Karputov :

Kesin olarak söyleyemem ama 0.0 deneyin


Eklendi: MQL5 kullanarak 'INDICATOR_MINIMUM' ve 'INDICATOR_MAXIMUM' iptal etmek imkansız görünüyor.

ne yazık ki..

Cevap için teşekkürler.

(seviyelerle, genel olarak konuşursak, aynı problem; ancak seviye sayısı ayarlanarak çözüldü)

 
User_mt5 :

ne yazık ki..

Cevap için teşekkürler.

(seviyelerle, genel olarak konuşursak, aynı problem; ancak seviye sayısı ayarlanarak çözüldü)

Deney ve iyi olacaksın.

 
User_mt5 :


Grafiğin kaydettiği özelliklerin karşılaştırılması (' Stokastik Osilatör ' göstergesi örneğinde)



<indicator>
name=Stochastic Oscillator
path=
apply= 0
show_data= 1
scale_inherit= 0
scale_line= 0
scale_line_percent= 50
scale_line_value= 0.000000
scale_fix_min= 1
scale_fix_min_val= 0.000000
scale_fix_max= 1
scale_fix_max_val= 100.000000
expertmode= 0
fixed_height=- 1 


<indicator>
name=Stochastic Oscillator
path=
apply= 0
show_data= 1
scale_inherit= 0
scale_line= 0
scale_line_percent= 50
scale_line_value= 0.000000
scale_fix_min= 0
scale_fix_min_val=- 10.500000
scale_fix_max= 0
scale_fix_max_val= 110.500000
expertmode= 0
fixed_height=- 1


Bu açıkça 'bool' tipinin bir özelliğidir, ancak bu özelliğe MQL5 dilinden erişim yoktur.

 
Vladimir Karputov :

Grafiğin kaydettiği özelliklerin karşılaştırılması (' Stokastik Osilatör ' göstergesi örneğinde)

Bu açıkça 'bool' tipinin bir özelliğidir, ancak bu özelliğe MQL5 dilinden erişim yoktur.

Evet, ne yazık ki.

Tekrar teşekkürler)

 

Bir sorun var. Fonksiyonu kullanarak (aşağıya bakınız), geçmişten pozisyon kimliğine göre TakeProfit ve StopLoss değerlerini alabilirsiniz (yani pozisyon zaten kapalıyken), bu fonksiyon gerçek zamanlı olarak çalışır, ancak bir nedenden dolayı belirleyemez. Strateji test cihazında TakeProfit ve StopLoss, stop oluşturan geçmiş emirleri görmediği için (pozisyon açtıktan sonra stopların ayarlanması önemlidir)

Soru şu ki, kapalı bir pozisyonun bileti ile strateji test cihazında bu pozisyonun TP / SL'sini nasıl bulabilirim?

 #include <Trade\DealInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>

CDealInfo deal;
CHistoryOrderInfo ord;


void GetPosStops( ulong ticket, int & tp, int & sl, double & lot){
   HistorySelectByPosition (ticket);
   tp= 0 ;sl= 0 ;
   double open= 0 , tp_= 0 , sl_= 0 ;
   string symbol= "" ;
   ENUM_DEAL_TYPE type=- 1 ;
   for ( int i= 0 ; i< HistoryDealsTotal (); i++){
       if (!deal.SelectByIndex(i)) continue ;
       if (deal.Entry() == DEAL_ENTRY_IN ){
         open=deal.Price();
         symbol=deal. Symbol ();
         type=deal.DealType();
         lot=deal.Volume();
         break ;
      }
   }
   for ( int i= 0 ; i< HistoryOrdersTotal (); i++){
       if (!ord.SelectByIndex(i)) continue ;
       if (tp_== 0 )tp_=ord.TakeProfit();
       if (sl_== 0 )sl_=ord.StopLoss();
       if (tp_> 0 && sl_> 0 ) break ;
   }
   if (symbol != "" ){
       double coef=type== DEAL_TYPE_BUY ? 1 :- 1 ;
       double point= SymbolInfoDouble (symbol, SYMBOL_POINT );
       if (tp_> 0 && coef*tp_>coef*open)
         tp=( int )( MathAbs (tp_-open)/point);
       if (sl_> 0 && coef*sl_<coef*open)
         sl=( int )( MathAbs (sl_-open)/point);   
   }
}
 
Herkese merhaba !
Sadece EA programlamayı deniyorum ve önce istatistiksel bir yayılma toplayıcı yazmak istiyorum.
Yani, ne yapmasını isterim? Test cihazı bir EA başlatır ve belirli bir süre, örneğin on gün boyunca kenelerin geçmişi hakkında veri toplar.
Daha sonra aşağıdaki verileri bir csv veya xlsx dosyasına verir:
Zaman aralığı için ortalama yayılma: 00:00 - 09:00 sunucu saati, 09:00 - 18:00 , 18:00 - 00:00 (10 günün tamamı için), bu süre için maksimum yayılma, minimum yayılma ve on günlük dönemin tamamı için döviz çifti için ortalama spread.
Elimle almaktan çok sıkıldım.

Bunu kendi kendine yapan programlar olduğunu biliyorum... Ama ben kendiminkini bir antrenman olarak istiyorum.
Belki bazı uzmanlar nereden başlayacağımı söyleyebilir? Böyle bir şey yazmak bile mümkün mü?

Cevap veren ve yeni başlayana anlayışla davranan herkese şimdiden teşekkürler.
 

Merhaba. Belki birinin hazır bir kod parçası vardır. 2 parametre vardır, mevduat = 3000 ve lot 0.01, yani 3000 depozito ile lot 0.01 olacak, şimdi kesinlikle ikiye katlandığında, yani depozito 6000 olduğunda, lot 0.02 olacak, 9000 ile 0.03 olacak bu nasıl yapılır?

 
Pavel Komarovsky :

Merhaba. Belki birinin hazır bir kod parçası vardır. 2 parametre vardır, mevduat = 3000 ve lot 0.01, yani 3000 depozito ile lot 0.01 olacak, şimdi kesinlikle ikiye katlandığında, yani depozito 6000 olduğunda, lot 0.02 olacak, 9000 ile 0.03 olacak bu nasıl yapılır?

Aşağı yukarı şöyle:

 //+------------------------------------------------------------------+
//|                                                     Script 1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double start_deposit= 3000 ;
   double start_lot= 0.01 ;
   double deposit=start_deposit;
   for ( int i= 0 ; i< 10 ; i++)
     {
      
       double d= MathFloor (deposit/start_deposit);
       Print (i, "#: ,deposit " , DoubleToString (deposit, 2 ), ", d " , DoubleToString (d*start_lot, 2 ));
       //---
      deposit=deposit+start_deposit* 0.55 ;
     }
  }
//+------------------------------------------------------------------+

Sonuç:

 2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     0 #: ,deposit 3000.00 , d 0.01
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     1 #: ,deposit 4650.00 , d 0.01
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     2 #: ,deposit 6300.00 , d 0.02
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     3 #: ,deposit 7950.00 , d 0.02
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     4 #: ,deposit 9600.00 , d 0.03
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     5 #: ,deposit 11250.00 , d 0.03
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     6 #: ,deposit 12900.00 , d 0.04
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     7 #: ,deposit 14550.00 , d 0.04
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     8 #: ,deposit 16200.00 , d 0.05
2021.05 . 04 09 : 03 : 15.246 Script 1 (EURUSD,H1)     9 #: ,deposit 17850.00 , d 0.05
Dosyalar:
Script_1.mq5  3 kb
 

Güzel gün,

Lütfen hatayı bulmama yardım edin... Komut dosyasında, gösterge arabelleğinden çubukların (BarsCount) değerlerini kopyalıyorum, ardından değerleri bir döngü içinde atlıyor, sinyali belirleyip Print()'e yazıyorum. baskı; Görünüşe göre her şey basit, ama orada değildi ... Sıfır çizgisini geçmek dışında tüm sinyalleri istediğim gibi alıyorum

 CROSSOVER_OR_REVERSE

gösterge. Belki bir senaryoda mümkün değildir? Günlüğün kodunu ve ekran görüntüsünü ekledim... Şimdiden teşekkürler!

 //+------------------------------------------------------------------+
//|                                                B_O_P_Signals.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
enum enMaTypes
  {
   ma_sma,     // Simple moving average
   ma_ema,     // Exponential moving average
   ma_smma,   // Smoothed MA
   ma_lwma     // Linear weighted MA
  };
  
input int        inpSmoothPeriod = 14 ;       // Result smoothing period
input enMaTypes inpSmoothMethod =  ma_sma;   // Result smoothing type
input double     inpLevelUp      =   0.2 ;     // Level up
input double     inpLevelDown    = - 0.2 ;     // Level down
input int        BarsCount       = 100 ;

double Mid_line[ 1 ] = { 0.0 };
int handle= 0 ;
double TREND_VAL[];

void OnStart ()
  {
      handle = iCustom ( _Symbol , PERIOD_CURRENT , "Balance of Market Power" ,inpSmoothPeriod,inpSmoothMethod,inpLevelUp,inpLevelDown);
      
       CopyBuffer (handle, 2 , 0 ,BarsCount,TREND_VAL);
      
       ArraySetAsSeries (TREND_VAL, true );
      
       string Signal = "" ;
      
         for ( int i= ArraySize (TREND_VAL)- 1 ; i>= 0 ; i--)
        {
           int k= 1 ;
             if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[ 0 ] && TREND_VAL[i] > inpLevelUp)
            
               Signal = "TREND_UP" ;
             else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[ 0 ] && TREND_VAL[i] < inpLevelUp)
            
               Signal = "TREND_UP_ROLLBACK_OR_FLAT" ;
             else if (TREND_VAL[i] >= Mid_line[ 0 ] && TREND_VAL[i+k] <= Mid_line[ 0 ])
            
               Signal = "CROSSOVER_OR_REVERSE_UP" ;
            
             else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[ 0 ] && TREND_VAL[i] < inpLevelDown)
            
               Signal = "TREND_DN" ;
             else if (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[ 0 ] && TREND_VAL[i] > inpLevelDown)
            
               Signal = "TREND_DN_ROLLBACK_OR_FLAT" ;
             else if (TREND_VAL[i] < Mid_line[ 0 ] && TREND_VAL[i+k] > Mid_line[ 0 ])
            
               Signal = "CROSSOVER_OR_REVERSE_DN" ;
             else Signal = "UNKNOWN_SIGNAL" ;
            
             Print ( string (i), "_" , Signal);
        }
      
   
  }
//+------------------------------------------------------------------+
Dosyalar:
Question.png  150 kb
Neden: