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

 
taramortom #:
저는 유전적 최적화를 사용합니다.

그렇다면 이것이 사실인 것 같습니다. 분명히 유전적 최적화에서는 오실레이터를 켜고 끄는 매개 변수가 오실레이터 매개 변수와 관련하여 강력하게 지배적입니다. 즉, 다음 세대를 번식시킬 때 꺼진 오실레이터 유전자를 가진 한 부모는 이 오실레이터 유전자를 가진 다른 부모의 자손을 많이 죽일 것입니다. 즉, 이러한 자손은 잘못된 매개 변수의 조건에 의해 폐기되고 자손을 낳지 않으며 진화가 빠르게 교착 상태에 빠집니다.
테스트 기간의 짧은 간격으로 전체 최적화 상태에서 테스터의 동작을 살펴보십시오. 이 경우 불필요하게 조합이 누락되지는 않나요?

 
Yuriy Bykov #:

그렇다면 이것이 사실인 것 같습니다. 유전적 최적화 과정에서 오실레이터를 켜고 끄는 매개 변수가 오실레이터 매개 변수와 관련하여 강력하게 지배적인 것으로 보입니다. 즉, 다음 세대를 번식시킬 때 꺼진 오실레이터 유전자를 가진 한 부모는 이 오실레이터 유전자를 가진 다른 부모의 자손을 많이 죽일 것입니다. 즉, 이러한 자손은 잘못된 매개 변수의 조건에 의해 폐기되고 자손을 낳지 않으며 진화가 빠르게 교착 상태에 빠집니다.
테스트 기간의 짧은 간격으로 전체 최적화 상태에서 테스터의 동작을 살펴보십시오. 이 경우 불필요하게 조합이 누락되지는 않나요?


예, 문제는 유전 알고리즘 + 특정 조합의 차단이라는 조합에 있습니다. 완전 최적화를 하면 모든 것이 올바르게 작동하지만 완전 최적화는 비현실적으로 오랜 시간이 걸립니다.

저는 어떻게 최적화 담당자에게 이러한 변형이 허용되지 않으며 이러한 변형을 사용하려고 시도하지 말고 다른 변형에 집중해야한다는 것을 보여줄 수 있기를 바랐습니다. 사실 말씀하신 대로 실제로 그렇게 되었습니다.

 
Alexey Petrov #:

프리랜서 작업을 생성하고 작업을 신청한 개발자 중에서 선택할 수 있습니다.

https://www.mql5.com/fr/job

고마워요, 광고를 올렸는데 드디어 해결책을 찾을 수 있기를 바랍니다 :)
 

안녕하세요!


전문가 어드바이저가 특정 시간에 거래할 수 있도록 하는 코드는 MQL5에서 어떻게 생겼나요? MQL4에서 포팅할 수 없습니다.


void OnTick()

{

double PriceBid = MarketInfo(0,MODE_BID);

double time = 시간() + 분()*0.01;

Comment("datum ",inpoint,

"\n", "step ",iter,

"n", "time ",time,

"n", "price", Bid,

"\n", "price", PriceBid);

if(time <= Stop_work_time)

{

//if(Type==BUY || Type==ALL)newbuyorder();

//if(Type==SELL || Type==ALL)newsellorder();

in();

takestop();

stoporders();

connected();

delorders();

}

else

{

takestop();

delorders();

}

}

파일:
kachinmind.mq4  38 kb
 
EfremovSergey 전문가 어드바이저가 특정 시간에 거래할 수 있도록 하는 코드는 MQL5에서 어떻게 생겼나요? MQL4에서 포팅할 수 없습니다.


void OnTick()

{

double PriceBid=MarketInfo(0,MODE_BID);

double time = 시간() + 분()*0.01;

Comment("datum ",inpoint,

"{n","step ",iter,

"n","time",time,

"n", "가격", 입찰,

"\n", "price", PriceBid);

if(time <= Stop_work_time)

{

//if(Type==BUY || Type==ALL)newbuyorder();

//if(Type==SELL || Type==ALL)newsellorder();

in();

takestop();

stoporders();

connected();

delorders();

}

else

{

테이크스톱();

delorders();

}

}

mq5에서 이 작업의 구현은 다음을 사용하여 반복할 수 있습니다.

MqlDateTime
 

모두 좋은 아침, 좋은 기분입니다!

전문가 여러분!!! 이 코드에서 무엇이 잘못되었는지 알려주시겠습니까 (오류가 주기적으로 나타나는 부분은 노란색으로 강조 표시되어 있습니다)?

//+------------------------------------------------------------------+
//|                                            Proba (version_1).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Global variables
MqlRates pArray[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(pArray,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!DownwardTrendline())
     {
      Print("Ошибка при создании линии DownwardTrendline!!! ", GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DownwardTrendline()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   CopyHigh(_Symbol,_Period,0,candles,pHigh);
   int candleHigh = ArrayMaximum(pHigh,0,candles);
   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
   ObjectDelete(0,"DnwardTrendline");
   ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,
                pArray[candleHigh].high,pArray[0].time,pArray[0].high);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
   return(true);
  }
//+------------------------------------------------------------------+

주기적으로 전략 테스터에서 작동 한 다음 작동하지 않고 로그에이 메시지가 나타납니다:


안부, 블라디미르.

 
MrBrooklin #:

여러분, 좋은 아침, 좋은 기분입니다!

전문가 여러분!!! 이 코드에서 무엇이 잘못되었는지 알려주세요 (코드에서 오류가 주기적으로 나타나는 부분은 노란색으로 강조 표시되어 있습니다):

주기적으로 전략 테스터에서 작동 한 다음 작동하지 않고 로그에이 메시지가 나타납니다:


안부, 블라디미르.

줄 뒤에 수표를 넣으십시오.

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

Data < 1이면 어떻게든 소리를 지르세요.

 
Alexey Viktorov #:

줄 뒤에 체크 표시를 하세요.

Data < 1이면 어떻게든 소리를 지르세요.

좋은 아침 알렉세이, 힌트 주셔서 감사합니다! 지금 시도해 보겠습니다.

안부 전해주세요, 블라디미르

 

대신

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

넣었습니다:

   if(CopyRates(_Symbol,_Period,0,candles,pArray)==-1)
     {
      Print("Ошибка копирования исторических данных в массив pArray[]!!!", GetLastError());
      return(false);
     }

그리고 모든 것이 작동했습니다. 그것은 꾸준히 그리고 정상적으로선을 그리지 만 이제는 전략 테스터에서 Expert Advisor를 새로 시작할 때마다 메시지가 주기적으로 나타납니다:

2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка копирования исторических данных в массив pArray[]!!!4003
2023.01.20 11:23:37.064 2022.01.03 03:21:49   Ошибка при создании линии DownwardTrendline!!! 4003

그러면 어떻게 든 코드에 부정적인 영향을 미치거나 "잊어 버릴"수 있습니까?

안부, 블라디미르.

 
MrBrooklin 전략 테스터에 주기적으로 메시지가 나타납니다:

그러면 이것이 어떻게 든 코드에 부정적인 영향을 미칠까요 아니면 "잊어 버릴"수 있습니까?

안부, 블라디미르.

이 작업을 수행하지 못하는 이유

bool .....()
{
if(Data>0)
{
..................
................

return true;
}
return false;
}
사유: