초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1302

 
User_mt5 :

블라디미르 카르푸토프 와 나?)

확실히 말할 수는 없지만 0.0을 시도하십시오.


추가됨: MQL5를 사용하여 'INDICATOR_MINIMUM' 및 'INDICATOR_MAXIMUM'을 취소하는 것은 불가능해 보입니다.

 
Vladimir Karputov :

확실히 말할 수는 없지만 0.0을 시도하십시오.


추가됨: MQL5를 사용하여 'INDICATOR_MINIMUM' 및 'INDICATOR_MAXIMUM'을 취소하는 것은 불가능해 보입니다.

아아..

답변 해주셔서 감사합니다.

(레벨은 일반적으로 같은 문제이지만 레벨의 수를 설정하여 해결)

 
User_mt5 :

아아..

답변 해주셔서 감사합니다.

(레벨은 일반적으로 같은 문제이지만 레벨의 수를 설정하여 해결)

실험하면 괜찮을 것입니다.

 
User_mt5 :


차트가 저장하는 속성 비교(' 스토캐스틱 오실레이터 ' 표시기의 예)



<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


이것은 분명히 'bool' 유형의 속성이지만 MQL5 언어에서 이 속성에 액세스할 수 없습니다.

 
Vladimir Karputov :

차트가 저장하는 속성 비교(' 스토캐스틱 오실레이터 ' 표시기의 예)

이것은 분명히 'bool' 유형의 속성이지만 MQL5 언어에서 이 속성에 액세스할 수 없습니다.

예, 아아.

다시 한 번 감사합니다)

 

문제가 있습니다. 함수(아래 참조)를 사용하여 기록에서 위치 ID별로 TakeProfit 및 StopLoss 값을 얻을 수 있습니다(즉, 위치가 이미 닫혀 있을 때), 이 함수는 실시간으로 작동하지만 어떤 이유로 결정할 수 없습니다 전략 테스터 의 TakeProfit 및 StopLoss , 스탑을 설정한 과거 주문을 볼 수 없기 때문입니다(포지션을 연 후 스탑을 설정하는 것이 중요함).

문제는 클로즈드 포지션 티켓으로 전략 테스터에서 이 포지션의 TP/SL을 찾는 방법입니다.

 #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);   
   }
}
 
여러분, 안녕하세요 !
저는 EA 프로그래밍을 시도 중이고 먼저 통계적 스프레드 수집기를 작성 하고 싶습니다.
내 말은, 그가 무엇을 해주기를 바라는가? 테스터는 EA를 시작하고 특정 시간(예: 10일) 동안의 틱 이력에 대한 데이터를 수집합니다.
그런 다음 다음 데이터를 csv 또는 xlsx 파일로 출력합니다.
해당 기간의 평균 스프레드: 00:00 - 09:00 서버 시간, 09:00 - 18:00, 18:00 - 00:00(전체 10일 동안), 이 시간의 최대 스프레드, 최소 스프레드 10일 동안의 통화쌍 평균 스프레드.
손으로 떼느라 정말 지쳤어요.

나는 그것을 스스로 하는 프로그램이 있다는 것을 알고 있다. 그러나 나는 운동으로서 나의 것을 원한다.
일부 전문가가 어디서부터 시작해야 하는지 알려줄 수 있습니까? 이런글도 쓸수있나요?

초보자를 이해하고 대응해 주신 모든 분들께 미리 감사드립니다.
 

안녕하세요. 누군가가 준비된 코드를 가지고 있을지도 모릅니다. 2개의 매개변수가 있습니다. 보증금 = 3000 및 로트 0.01, 즉 3000의 보증금이 있는 경우 로트는 0.01이 됩니다. 이제 엄격하게 두 배로 증가할 때, 즉 보증금이 6000일 때 로트는 0.02가 되고 9000이 됩니다. 어떻게 해야 0.03이 될까요?

 
Pavel Komarovsky :

안녕하세요. 누군가가 준비된 코드를 가지고 있을지도 모릅니다. 2개의 매개변수가 있습니다. 보증금 = 3000 및 로트 0.01, 즉 3000의 보증금이 있는 경우 로트는 0.01이 됩니다. 이제 엄격하게 두 배로 증가할 때, 즉 보증금이 6000일 때 로트는 0.02가 되고 9000이 됩니다. 어떻게 해야 0.03이 될까요?

다음과 같이 다소:

 //+------------------------------------------------------------------+
//|                                                     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 ;
     }
  }
//+------------------------------------------------------------------+

결과:

 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
파일:
Script_1.mq5  3 kb
 

안녕하세요,

오류를 찾도록 도와주세요... 스크립트 에서 표시기 버퍼 에서 막대 값(BarsCount)을 복사한 다음 루프의 값을 무시하고 신호를 결정하고 이를 위해 Print()에 씁니다. 인쇄; 모든게 단순해 보이지만 거기엔 없었어... 제로라인 넘은거 빼고는 다 내가 원하는대로 신호를 받아

 CROSSOVER_OR_REVERSE

지시자. 스크립트에서는 불가능할까요? 로그의 코드와 스크린샷을 첨부했습니다... 미리 감사합니다!

 //+------------------------------------------------------------------+
//|                                                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);
        }
      
   
  }
//+------------------------------------------------------------------+
파일:
Question.png  150 kb
사유: