MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 6

 

동지 여러분, 저는 히스토리 매칭을 해본 적이 없어서 최적화 후 그래프를 읽는 것이 얼마나 복잡한지 모릅니다.

연간 통과 2014-2015 이후에 이러한 일정이 있습니다. 어디를 봐야하며 무엇을 의미합니까? 정육면체의 색상과 배열이 궁금합니다. 왜 일부는 중앙에, 두 번째는 아래/위, 그리고 둘/셋은 한 사각형에 있습니까?

설명 감사합니다!

 
strongflex :
테스터에서 거래를 열지 않습니다. 여기서 문제가 될 수 있는 것은 무엇입니까?

음... 먼저 매도호가로 매도를 시도합니다. Bid에서 판매가 열리고 Ask에서 구매가 열립니다.

RSI 데이터에 대한 검색과 기능에 대한 레벨의 교차를 설계했습니다. 가격 확인 기능도 있습니다. 반환 신호: 매수, 매도 또는 없음(-1)

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link        "https://login.mql5.com/ru/users/artmedia70"
#property version    "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES       TimeframeRSI   = PERIOD_M15 ;   // Таймфрейм RSI
input int                   PeriodRSI      = 14 ;           // Период расчёта RSI
input ENUM_APPLIED_PRICE    PriceRSI       = PRICE_CLOSE ; // Цена расчёта RSI
input int                   UpperRSIlevel  = 70 ;           // Верхний уровень RSI
input int                   LowerRSIlevel  = 30 ;           // Нижний уровень RSI
input int                   MinutesBefore  = 20 ;           // Количество минут назад
//--- global variables
int       minutesBefore;     // Количество минут назад
int       periodRSI;         // Период расчёта RSI
int upperRSIlevel;         // Верхний уровень RSI
int lowerRSIlevel;         // Нижний уровень RSI
//---
double    prevRSIvalue0;     // Значение RSI для заданного тф xxx минут назад
double    prevRSIvalue1;     // Значение RSI для заданного тф xxx минут назад-x минут
//---
double    prevClose_0;       // Значение Close для заданного тф xxx минут назад
double    prevClose_1;       // Значение Close для заданного тф xxx минут назад-x минут
//---
datetime timeBefore;       // Время ххх минут назад
datetime timePrevBefore;   // Время ххх минут назад-x минут
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   minutesBefore=(MinutesBefore< 1 ? 1 :MinutesBefore);   // Количество минут назад
   periodRSI=(PeriodRSI< 1 ? 1 :PeriodRSI);
   upperRSIlevel=(UpperRSIlevel< 1 ? 1 :UpperRSIlevel> 100 ? 100 :UpperRSIlevel);
   lowerRSIlevel=(LowerRSIlevel< 0 ? 0 :lowerRSIlevel> 99 ? 99 :LowerRSIlevel);
   if (upperRSIlevel<=lowerRSIlevel) upperRSIlevel=lowerRSIlevel+ 1 ;
   if (lowerRSIlevel>=upperRSIlevel) lowerRSIlevel=upperRSIlevel- 1 ;
   /*

   */
  
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   MqlDateTime server_time;
   TimeToStruct ( TimeCurrent (),server_time);
   //--- если значение минут серверного времени кратно заданному значению, в частности 20-ти минутам или равно 0
   if (server_time.min%minutesBefore== 0 || server_time.min== 0 ) {
       if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_BUY ) {
         //--- получили сигнал на покупку
         Print ( "Сигнал на покупку " , TimeCurrent ());   // Проверочное сообщение в журнал
         //--- проверка наличия уже открытой позиции на покупку
         //--- вызов функции открытия позиции на покупку
         }
       if (SignalByRSI( Symbol (),TimeframeRSI,minutesBefore)== OP_SELL ) {
         //--- получили сигнал на продажу
         Print ( "Сигнал на продажу " , TimeCurrent ());   // Проверочное сообщение в журнал
         //--- проверка наличия уже открытой позиции на продажу
         //--- вызов функции открытия позиции на продажу
         }
      }
  }
//+------------------------------------------------------------------+
double GetLastDataRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift, int period_rsi= 14 , ENUM_APPLIED_PRICE price_rsi= PRICE_CLOSE ) {
   return ( iRSI (symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
double GetPriceClose( string symbol_name, ENUM_TIMEFRAMES timeframe, int shift){
   double array[ 1 ];
   if ( CopyClose (symbol_name,timeframe,shift, 1 ,array)== 1 ) return (array[ 0 ]);
   return (- 1 );
}
//+------------------------------------------------------------------+
int GetBarShift( string symbol_name, ENUM_TIMEFRAMES timeframe, datetime time) {
   if (time< 0 ) return (- 1 );
   //---
   datetime array[], time0;
   if ( CopyTime (symbol_name,timeframe, 0 , 1 ,array)< 0 ) return (- 1 );
   time0=array[ 0 ];
   if ( CopyTime (symbol_name,timeframe,time0,time,array)< 0 ) return (- 1 );
   datetime temptime=GetTime(symbol_name,timeframe, ArraySize (array)- 1 );
   if (array[ 0 ]==temptime && temptime<=time) return ( ArraySize (array)- 1 );
   else return ( ArraySize (array));
}
//+------------------------------------------------------------------+
datetime GetTime( string symbol_name, ENUM_TIMEFRAMES timeframe, int bar) {
   if (bar< 0 ) return (- 1 );
   datetime array[];
   if ( CopyTime (symbol_name,timeframe,bar, 1 ,array)> 0 ) return (array[ 0 ]);
   return (- 1 );
}
//+------------------------------------------------------------------+
int SignalByRSI( string symbol_name, ENUM_TIMEFRAMES timeframe, int minutes_before, int upper_lev_rsi= 70 , int lower_lev_rsi= 30 ) {
   //--- время 1x и 2x минут назад
   datetime time_before_0= TimeCurrent ()-minutes_before* PeriodSeconds ( PERIOD_M1 );
   datetime time_before_1= TimeCurrent ()- 2 *minutes_before* PeriodSeconds ( PERIOD_M1 );
   //--- смещение в барах времени 1х и 2х для заданного таймфрейма RSI (тф М15)
   int shift_0=GetBarShift(symbol_name,timeframe,time_before_0);
   int shift_1=GetBarShift(symbol_name,timeframe,time_before_1);
   //--- значения RSI на барах 1х и 2х минут назад для заданного таймфрейма RSI (тф М15)
   double prev_rsi_value_0=GetLastDataRSI(symbol_name,timeframe,shift_0);
   double prev_rsi_value_1=GetLastDataRSI(symbol_name,timeframe,shift_1);
   //--- значения цен закрытия баров 1х и 2х минут назад
   double prev_close_0=GetPriceClose(symbol_name,timeframe,shift_0);
   double prev_close_1=GetPriceClose(symbol_name,timeframe,shift_1);
   //--- отладочные сообщения
   string tf= EnumToString (TimeframeRSI);
   MqlDateTime server_time;
   TimeToStruct ( TimeCurrent (),server_time);
   Comment (
           "\nВремя проверки RSI: " , TimeCurrent (), ", минуты времени проверки: " ,server_time.min,
           "\nВремя " ,minutes_before, " минут назад: " ,time_before_0, ", бар " ,tf, " : " ,shift_0,
           "\nВремя " ,minutes_before* 2 , " минут назад: " ,time_before_1, ", бар " ,tf, " : " ,shift_1,
           "\nЗначение RSI " ,minutes_before, " минут назад на " ,tf, " : " , DoubleToString (prev_rsi_value_0, 4 ),
           "\nЗначение RSI " ,minutes_before* 2 , " минут назад на " ,tf, " : " , DoubleToString (prev_rsi_value_1, 4 ),
           //---
           "\nЗначение Close " ,minutes_before, " минут назад > " ,tf, " : " , DoubleToString (prev_close_0, Digits ()),
           "\nЗначение Close " ,minutes_before* 2 , " минут назад > " ,tf, " : " , DoubleToString (prev_close_1, Digits ())
          );
   //--- проверка наличия данных RSI
   if (prev_rsi_value_1> 0 && prev_rsi_value_0> 0 ) {
       //--- проверка условия на продажу
       if (prev_rsi_value_1<upper_lev_rsi && prev_rsi_value_0>upper_lev_rsi) {
         if (prev_close_0> SymbolInfoDouble (symbol_name, SYMBOL_BID )) return ( OP_SELL );
         }
       //--- проверка условия на покупку
       if (prev_rsi_value_1>lower_lev_rsi && prev_rsi_value_0<lower_lev_rsi) {
         if (prev_close_0< SymbolInfoDouble (symbol_name, SYMBOL_ASK )) return ( OP_BUY );
         }
      }
   return (- 1 );
}
//+------------------------------------------------------------------+
 
Vitaly Muzichenko :

동지 여러분, 저는 히스토리 매칭을 해본 적이 없어서 최적화 후 그래프를 읽는 것이 얼마나 복잡한지 모릅니다.

연간 통과 2014-2015 이후에 이러한 일정이 있습니다. 어디를 봐야하며 무엇을 의미합니까? 정육면체의 색상과 배열이 궁금합니다. 왜 일부는 중앙에, 두 번째는 아래/위, 그리고 둘/셋은 한 사각형에 있습니까?

설명 감사합니다!

나 역시 수년 동안 옵티마이저를 신뢰한 적이 없습니다. 적합하다고 생각합니다. 하지만 색이 진할수록 좋은 것 같습니다. 그러나 채도가 높은 색상의 블록이 많을수록 좋습니다. 그러나이 불명예로 다음에해야 할 일은 - 나는 전혀 모릅니다. 테스트 기록에 대한 어리석은 값 선택이 아니라 항상 적응형 시스템을 구축하려고 노력했습니다.

아마도 이 모든 것을 우리에게 설명할 수 있는 누군가가 있을 것입니다.

 
Artyom Trishkin :

나 역시 수년 동안 옵티마이저를 신뢰한 적이 없습니다. 적합하다고 생각합니다. 하지만 색이 진할수록 좋은 것 같습니다. 그러나 채도가 높은 색상의 블록이 많을수록 좋습니다. 그러나이 불명예로 다음에해야 할 일은 - 나는 전혀 모릅니다. 테스트 기록에 대한 어리석은 값 선택이 아니라 항상 적응형 시스템을 구축하려고 노력했습니다.

아마도 이 모든 것을 우리에게 설명할 수 있는 누군가가 있을 것입니다.

예, 아마도 아무도 설명하지 않을 것입니다. 포럼에는 10-12명의 사람들이 남아 있으며 그들 중 일부는 금지되었고 많은 사람들은 돌아오지 않을 것입니다. 이제 포럼을 보면 5-7명 정도 나오는데 그 중 절반은 질문에 답을 하지 않습니다. 일정에 대한 내 질문은 여전히 답이 없습니다.
 
Vitaly Muzichenko :
예, 아마도 아무도 설명하지 않을 것입니다. 포럼에는 10-12명의 사람들이 남아 있으며 그들 중 일부는 금지되었고 많은 사람들은 돌아오지 않을 것입니다. 이제 포럼을 보면 5-7명 정도 나오는데 그 중 절반은 질문에 답을 하지 않습니다. 일정에 대한 내 질문은 여전히 답이 없습니다.
네 번째 포럼을 볼 필요가 있습니다. 나는 오래전에 최적화 프로그램에 대한 설명을 보았지만 그것이 무엇에 관한 것인지, 어디에 있는지 전혀 기억하지 못합니다 ...
 
Artyom Trishkin :
네 번째 포럼을 볼 필요가 있습니다. 오래 전에 최적화 프로그램에 대한 설명을 보았지만 그것이 무엇에 관한 것인지, 어디에 있는지 전혀 기억하지 못합니다 ...
여기 이지만 테스트 중에 얻은 것과 전혀 일치하지 않아 전문가에게 질문했습니다.
 

안녕하세요.

외부 설정에서 이 작업을 수행하는 경우 드롭다운 캘린더에서 날짜를 선택할 수 없는 이유를 알려주세요.
extern datetime CloseTime        = D'2016.09.11 15:50' ;   //

날짜를 선택하고 키보드에서 입력하지 않도록 어떻게 든 변경할 수 있습니까?

 
Vitaly Muzichenko :

동지 여러분, 저는 히스토리 매칭을 해본 적이 없어서 최적화 후 그래프를 읽는 것이 얼마나 복잡한지 모릅니다.

연간 통과 2014-2015 이후에 이러한 일정이 있습니다. 어디를 봐야하며 무엇을 의미합니까? 정육면체의 색상과 배열이 궁금합니다. 왜 일부는 중앙에, 두 번째는 아래/위, 그리고 둘/셋은 한 사각형에 있습니까?

설명 감사합니다!

비탈리 무지첸코 :
예, 아마도 아무도 설명하지 않을 것입니다. 포럼에는 10-12명의 사람들이 남아 있으며 그들 중 일부는 금지되었고 많은 사람들은 돌아오지 않을 것입니다. 이제 포럼을 보면 5-7명 정도 나오는데 그 중 절반은 질문에 답을 하지 않습니다. 일정에 대한 내 질문은 여전히 답이 없습니다.

특별히 설명할 것이 없으니 아무도 대답하지 않는다. 당신이 보여준 그 그래프는 무의미하고 어떻게 얻었는지 수수께끼입니다.

그리고 테스터의 "최적화 그래프" 탭에 있는 "2차원 표면" 옵션은 조언자의 2개 입력 매개변수를 최적화해야 하거나 기록에서 2개 매개변수의 값을 시각적으로 확인해야 할 때 의미가 있습니다(IMHO). 이러한 매개변수가 상호 의존적인지, 그리고 그들이 전혀 의미가 있는지 여부와 같은 좋은 결과가 있었습니다.

다음은 2개의 입력 매개변수를 최적화하는 예입니다(가장 성공적이지는 않지만 지금은 더 나은 예를 찾지 못했습니다).


수평 - 16 단계의 첫 번째 매개 변수 값, 수직 - 2 단계도 16 단계. 녹색 사각형이 어두울수록 이익이 더 커집니다(이익으로 최적화하는 경우) 해당 매개 변수 값 , 창백할수록 적습니다. 가장 좋은 결과(역사상 이익 측면에서)는 중앙에 있는 것으로 나타났습니다. 그 주위에 짙은 녹색 "힙"이 보이는 것처럼 보입니다. 이는 이 두 매개변수 사이에 일종의 종속성과 패턴이 있고 매개변수가 의미가 없고 최적화 결과가 무작위가 아님을 의미합니다. 따라서 최상의 결과(중앙)에서 이러한 2x 매개변수의 값에 주의를 기울일 가치가 있습니다.

일반적으로 모든 것이 매우 간단합니다. 그러나 그것을 사용하는 방법, 누군가는 무엇에 대해 충분한 상상력을 가지고 있습니다. 나는이 녹색 사각형을 오랫동안 보지 않았습니다))

어떤 이유로 두 축의 차트에는 0만 있고 수직으로 이 0은 3개의 중간 단계로 더 나뉩니다. 한 광장에". 결과는 무작위로 보입니다. 흰색과 녹색 "주사위"가 무작위로 흩어져 있습니다. 따라서 그래프는 무의미하고 아무 의미가 없어 보입니다.

 
안녕하세요.
표시기에서 sqlite3 데이터베이스 와 함께 작동하도록 내 자신의 dll을 작성 중입니다. 배포 키트와 인터넷에서 모든 예제를 공부했습니다. 개발 환경 코드 블록. dll은 작동하지만 액세스 위반으로 부정확하고 주기적으로 충돌합니다.
초기 질문:
1. 코드 블록에서 dll을 올바르게 어셈블할 수 있습니까? 아니면 Visual Studio에서만 가능합니까? 간단한 예제( Int , double 로 작업)가 조립되고 작동합니다. 배수구 및 파일 작업이 없습니다. 프로그램이 충돌합니다.
2. __cdecl에서만 __stdcall 선언으로 시작하고 작업하는 데 실패했습니다. 함수 이름이 왜곡되고 코드 블록의 Def 파일이 정상적으로 작동하지 않습니다.
아시는 분들 도움 부탁드립니다.
이미 주제가 있는 경우 관리자에게 메시지를 적절한 스레드로 이동하도록 요청합니다.
 
mila.com :

안녕하세요.

외부 설정에서 이 작업을 수행하는 경우 드롭다운 캘린더에서 날짜를 선택할 수 없는 이유를 알려주세요.
extern datetime CloseTime        = D'2016.09.11 15:50' ;   //

날짜를 선택하고 키보드에서 입력하지 않도록 어떻게 든 변경할 수 있습니까?

input datetime CloseTime        = D'2016.09.11 15:50' ;