寻找神圣的 "圣杯"...。 - 页 9

 
Hoper23 >> :
问题是,任务的目标很明确,但在MQL中实现的可能性似乎并不明确,因为我还不熟悉测试器-优化器的内置数组功能。我正试图重新阅读MQL手册,但我还没有找到这个块。而thecore自制的优化器与其说是不可靠,不如说是不太容易理解。这些变量的组成相当奇怪,没有注释,而且与上述链接中提到的工作版本有根本的不同。如果不难,亲爱的核心,解释你的观点的优化器,这样就可以适合所有19个参数和自动替换的结果。

从一个程序员口中听到这个消息,我觉得很奇怪,但我会试着把它分解(不是拼出来)。

1.假设你有一个有N个输入参数的函数

Function(n1,n2,...,n19)。

2.参数

n1从n1Min到n1Max变化,步长n1Step

....

n19从n19Min到n19Max的变化,n19Step


你需要这样做。

- 遍历所有(对于线性方法)传入的参数或不是所有(对于快速收敛方法)传入的参数。

有很多快速收敛的方法,其中之一就是遗传算法。

- 每当你输入一批新的参数,你就会在输出端得到函数的结果。

- 你需要写一个块来分析这些结果,并决定结果是否是

好的。

我知道你在分析单元上遇到了麻烦。因为如果你不知道如何写一个函数或如何

或如何查看输入参数,这不适合我,这是为编程课或喜欢拼写的人准备的。

编程的基础知识。

分析单位做什么。

1.它选择你要分析的最古老的BAR_Y条,并将当前的Y时间数据滑入你的

功能。也就是说,你的函数认为BAR_Y是TimeCurrent。

2.现在,在历史深度中,你的Function(n1,n2,...,n19)如果是在第0条,会取多少条。

并获得一些结果。

例如,你的策略是沿着iMA3,iMA2,iMA1寻找一个极值。然后我们有iMA_Y+2,iMA_Y+1,iMA_Y

如果它是一个极值点,我们就停止,如果不是,我们就做Y++。

好的。我们在位置t找到极值点,即iMAt+2,iMAt+1,iMAt

现在我们需要计算TP或SL是否会被触发

也就是说,从t点开始,我们往下走,分析从Open[t]到High[t]再到Low[t]的距离。

然后从Open[t]到High[t-1]再到Low[t-1],如果我们没有达到TP或SL,我们再进一步--采取T-2,如此反复,直到成功为止。

TP或SL或两者都是。

我们已经找到了Function(n1,n2,...,n19)的FIRST条件。

让我们保存这个结果。

接下来我们做t--,继续分析,直到第0条。

4.我们转移Y--并重复这个过程。

因此,我们找到了截至当前时刻的函数Function(n1,n2,...,n19)的所有出现次数。

5.分析当前的时刻,看看过去是否有类似的情况,以及它们是如何结束的。

6.保存结果。

7.为Function(n1,n2,...,n19)取下一组参数n1,,n19并检查它

8.重复进行,直到我们的参数用完。

9.我们选择最佳的参数集或几个参数集,并根据它们的建议,设置买入、卖出或购买。

什么都不做。

这就是全部。

我希望它是困难的,因为它确实是困难的。


 
Hoper23 >> :
问题是,任务的目的很明确,但用MQL语言实现的可能性似乎不清楚,因为我还不熟悉测试器-优化器的内置数组的功能。我正试图重新阅读MQL手册,但我还没有找到这个块。而thecore自制的优化器与其说是不可靠,不如说是不太容易理解。那里的变量写得相当怪异,没有注释,而且与上述链接中提到的工作版本有根本的不同。如果不难的话,亲爱的thecore,请解释一下你对优化器的看法,这样我就可以把所有的19个参数和自动完成的结果塞进去。

顺便说一下,不要从蛮力块开始--它比解析器更容易写。

如果你觉得我说的这些都太复杂,可以找找xeon的自动优化器。

它使用MetaTrader优化器。不要寻找内置的自动优化功能。没有了。

 
Figar0 >> :

这里是 klot的指标,指标中嵌入了GA优化器。

我认为Hoper23不会对其进行基因分析,无论这个链接是否被破坏。

更为重要的是,它并没有被打破。

 

这是我得到的东西

void Optimization()
{
 int StartBar = iBarShift(Symbol(), 0, TimeCurrent()-60*( EndDate+ OptimDuration));
 int EndBar = iBarShift(Symbol(), 0, TimeCurrent()-60* EndDate);
 int Count = 0;
 double CurRF = -999999;
 ArrayInitialize( EqualProfit, 0);
 ArrayInitialize( TransCount, 0);
 ArrayInitialize( MaxDrowDown, 0);
 for( S = Sstart; S <= Send; S += Sstep)
 for( O = Ostart; O <= Oend; O += Ostep)
 for( I = Istart; I <= Iend; I += Istep)
 for( G = Gstart; G <= Gend; G += Gstep)
 for( M = Mstart; M <= Mend; M += Mstep)
 for( CC = CCstart; CC <= CCend; CC += CCstep)
 for( CCI = CCIstart; CCI <= CCIend; CCI += CCIstep)
 for( F_EMA = F_EMAstart; F_EMA <= F_EMAend; F_EMA += F_EMAstep)
 for( S_EMA = S_EMAstart; S_EMA <= S_EMAend; S_EMA += S_EMAstep)
 for( SMA = SMAstart; SMA <= SMAend; SMA += SMAstep)
 for( stK = stKstart; stK <= stKend; stK += stKstep)
 for( stP = stPstart; stP <= stPend; stP += stPstep)
 for( stD = stDstart; stD <= stDend; stD += stDstep)
 for( W = Wstart; W <= Wend; W += Wstep)
 for( H = Hstart; H <= Hend; H += Hstep)
 for( C = Cstart; C <= Cend; C += Cstep)
 for( Skill = Skillstart; Skill <= Skillend; Skill += Skillstep)
 for( SkillMAX = SkillMAXstart; SkillMAX <= SkillMAXend; SkillMAX += SkillMAXstep)
 for( shirina = shirinastart; shirina <= shirinaend; shirina += shirinastep)
   {
    int CurTrans =0;
    double CurOpenPrice = 0;
    int EqualMax = 0;
    int EqualMin = 0;
     for(int i = StartBar; i >= EndBar; i--)
      {
       EqualMin = MathMin( EqualProfit[ Count], EqualMin);
       if( EqualProfit[ Count] > EqualMax)
        {
         MaxDrowDown[ Count] = MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);
         EqualMax = EqualProfit[ Count];
         EqualMin = EqualMax;
        }
        MaxDrowDown[ Count] = MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);
    if( EqualProfit[ Count] != 0)
     if( CurRF < MaxDrowDown[ Count]/ EqualProfit[ Count])
      {
       CurRF = MaxDrowDown[ Count]/ EqualProfit[ Count];
       int Num = Count;
       int BestS = S;
       int BestO = O;
       int BestI = I;
       int BestG = G;
       int BestM = M;
       int BestCC = CC;
       int BestCCI = CCI;
       int BestF_EMA = F_EMA;
       int BestS_EMA = S_EMA;
       int BestSMA = SMA;
       int BeststK = stK;
       int BeststP = stP;
       int BeststD = stD;
       int BestW = W;
       int BestH = H;
       int BestC = C;
       int BestSkill = Skill;
       int BestSkillMAX = SkillMAX;
       int Bestshirina = shirina;

        }
     
    Count++;
   } // Цикл переменных 
 
   
 Alert("Оптимизация завершена. Прибыль max ", EqualProfit[ Num]," пунктов. Сделок ", TransCount[ Num], ". Просадка ", MaxDrowDown[ Num]);
 Alert("Параметры: S = ", BestS, ", O = ", BestO, ", I = ", BestI, ", G = ", BestG, ", M = ", BestM, ", CC = ", BestCC, ", CCI = ", BestCCI,
  ", F_EMA = ", BestF_EMA, ", S_EMA = ", BestS_EMA, ", SMA = ", BestSMA, ", stK = ", BeststK, ", stP = ", BeststP, ", stD = ", BeststD,
   ", W = ", BestW, ", H = ", BestH, ", C = ", BestC, ", Skill = ", BestSkill, ", SkillMAX = ", BestSkillMAX, ", shirina = ", Bestshirina);
 LastOptim = TimeCurrent();
 GlobalVariableSet("LastOptimization", LastOptim);
 if( CurRF < 0)
  if(MessageBox("Фактор восстановления меньше нуля./nПринимать данные оптимизированные параметры?", "Вопрос", MB_YESNO) == IDNO) 
    return;    
        BestS = S;
        BestO = O;
        BestI = I;
        BestG = G;
        BestM = M;
        BestCC = CC;
        BestCCI = CCI;
        BestF_EMA = F_EMA;
        BestS_EMA = S_EMA;
        BestSMA = SMA;
        BeststK = stK;
        BeststP = stP;
        BeststD = stD;
        BestW = W;
        BestH = H;
        BestC = C;
        BestSkill = Skill;
        BestSkillMAX = SkillMAX;
        Bestshirina = shirina;

 GlobalVariableSet("AutoS", S);
 GlobalVariableSet("AutoO", O);
 GlobalVariableSet("AutoI", I);
 GlobalVariableSet("AutoG", G);
 GlobalVariableSet("AutoM", M);
 GlobalVariableSet("AutoCC", CC);
 GlobalVariableSet("AutoCCI", CCI);
 GlobalVariableSet("AutoF_EMA", F_EMA);
 GlobalVariableSet("AutoS_EMA", S_EMA);
 GlobalVariableSet("AutoSMA", SMA);
 GlobalVariableSet("AutostK", stK);
 GlobalVariableSet("AutostP", stP);
 GlobalVariableSet("AutostD", stD);
 GlobalVariableSet("AutoW", W);
 GlobalVariableSet("AutoH", H);
 GlobalVariableSet("AutoC", C);
 GlobalVariableSet("AutoSkill", Skill);
 GlobalVariableSet("AutoSkillMAX", SkillMAX);
 GlobalVariableSet("Autoshirina", shirina);
进一步拖延--我不知道如何固定正数结果并自动替换成变量。
 
Hoper23 писал(а)>>

yyyyy....."带你到这个页面的链接已经 "死亡 "或被删除。" 不错的推荐!!!。有点类似于去死吧的方向。(无意冒犯,只是为了好玩)。

这是对我的感谢),对我的链接的感谢,对klot'y的实际准备好的解决方案的感谢),你有了测试器和优化器,只要稍微调整一下以适应你的需要。 而一切都会打开。

 

回答不开!!!。


 
Hoper23 >> :

这是我得到的东西

1.不要试图正面解决这个问题。

为什么你需要保存所有可能的解决方案的所有变体。

你不是在解决一个数学问题。你在看历史,看与你类似的情况

今天,现在要决定做什么。

因此,首先要描述目前的情况,并具体寻找。

这将减少大量的传递、变量和结果的数量。

下一步,停止--我不知道如何固定一个积极的结果并将其自动放入一个变量。

在第一阶段,我把它保存在一个文件中。在大约10,000-50,000个获胜选项的历史上收到。

然后在Excel中进行分析。

2.不要找一个完全匹配的。这不像是我们在描述一个正弦波。

3.先为一个变量写一个数据收集块,调试一下,然后再增加18个或你有多少个变量。

 

很好。这个想法是符合逻辑的。那么,你如何解决对单一参数的组合进行优化的公式呢?整个问题是,在这个例子中,它们是相互关联的。由于我对MQL的了解有限,我还不知道另一个例子。

Combination = MathFloor((L1End-L1Start)/L1Step)*MathFloor((L2End-L2Start)/L2Step);
 

这种胡言乱语是为了优化线下的

extern int setWeek   = 0;          //День недели старта оптимизации
extern int setHour   = 02;         //Час старта оптимизации
extern int setMinute = 25;         //Минута старта оптимизации
extern int ProgNumber= 2;          //номер программы оптимизации
extern bool OptimStart=false;
extern bool report=false;
#include <MacroAutoOptimization.mqh> 


int init() {


 if(IsOptimization()){
    string Str;
    int Cmd, Step, HandleStep;    
    HandleStep=FileOpen("ExpertMessage.csv", FILE_CSV| FILE_READ| FILE_WRITE,0x7F);
    if( HandleStep>0){
       Str  = FileReadString( HandleStep);
       Cmd  = StrToInteger(StringSubstr( Str,0,StringFind( Str,";",0)));
       Step = StrToInteger(StringSubstr( Str,StringFind( Str,";",0)+1,StringLen( Str)-StringFind( Str,";",0)-1))+1;
       FileSeek( HandleStep,0, SEEK_SET);
       FileWrite( HandleStep, Cmd+";"+ Step);
       FileClose( HandleStep);
  }} 

  
   return(0);
  }


int deinit()
  {
   Comment("Привет!");
   return(0);
  }

int start()
{

 if(IsOptimization()==false && IsTesting()==false){
        double Itog[][17];
        int TecWeek=TimeDayOfWeek(TimeLocal());
        int TecHour=TimeHour(TimeLocal());
        int TecMinute=TimeMinute(TimeLocal());
        if(! OptimStart){  
           if( TecWeek== setWeek){  
              if( TecHour== setHour){ 
                 if( TecMinute>= setMinute && TecMinute< setMinute+4){ 
                    if( AutoStart( ProgNumber, Itog)<0){Print("Оптимизация завершилась неудачей!");}
                    deinitialization();
                    OptimStart=true;
                    report=true;
        }}}}
        if( TecHour!= setHour){ OptimStart=false;}              //Обнуление флага старта оптимизации
        if(ArrayRange( Itog,0)>0){
//         Переменные для оптимизации
           stK     = Itog[0][7];
           stP   = Itog[0][8];
           stD  = Itog[0][9];
           W = Itog[0][10];
           H  = Itog[0][11];
           C  = Itog[0][12];
           CCI  = Itog[0][13];
           F_EMA  = Itog[0][14];
           S_EMA  = Itog[0][15];
           SMA  = Itog[0][16];
           shirina  = Itog[0][17];
           S  = Itog[0][18];
           O  = Itog[0][19];
           I  = Itog[0][20];
           M  = Itog[0][21];
           G  = Itog[0][22];
           CC  = Itog[0][23];
           if( report){
              Print("Новые параметры ", stK," | ", stP," | ", stD," | ", W," | ", H," | ", C," | ", CCI," | ", F_EMA," | ", S_EMA," | ", SMA," | ", shirina," | ", S," | ", O," | ", I," | ", M," | ", G," | ", CC);
              report=false;
     }}}   

它配有一本圣经。

бла-бла-бла

而且还有一个biblah与之相配。

бла-бла-бла

没有任何作用......或者说,它把自己搞得一团糟,对CPU造成压力,但变量没有变化,而且做什么都很快--几秒钟就完事了。我不明白。
 
Hoper23 >> :

这种胡言乱语是为了优化线下的

它配有一本圣经。

然后是biblah。

而它没有工作......或者说,它把自己搞得乱七八糟,给CPU带来压力,但变量没有变化,而且让一切变得很快--几秒钟就完事了。我不明白。



你已经开始使用xeon的 自动优化器工作了

TestCommander(自动优化)交易者的工具

所以问他。

顺便说一下,如果我没记错的话,这个产品已经支付了。

其中有一个帮助,一切都在那里解释得很清楚。