SOM: 烹饪方法 - 页 3

 

alexeymosc!

> 在日线上对英镑兑美元进行了分析,1989年至2011年。

[...]

> OOS时期(从2010年初到现在)。


这是一个打字错误,还是在不经意间将OSS期拉长到分析期?

 
哈,好问题。
 
这很简单。该网络是利用1989年至2009年底的数据建立的。我检查了从2010年初开始的结果策略...你为什么要这么激动,我不明白。自己重复分析,自己看。
 
他们最好说点正事,他们自己要了数据,却不说一句话。
 
alexeymosc:
你最好说点重点,你要了数据却什么都没说。


你好,Alexey!

我想这里的很多人都对你的结果感兴趣。我将尝试 "从我自己的观点 "来解释,所以请不要过多地跺脚和 吹喇叭

如果我们进行以下转换:Cycle = Close[]-ma(Close[], 25),那么我们将得到一个静止的信号(平均值=Const, sigma=Const)。而我们将尝试用SOM和同样的长度为40的模式在这个周期上建立一个交易系统。我们将得到一个良好的、强大的系统...而在一个正常的价格系列上,有随机的趋势,这是由通货膨胀、通货紧缩和其他外部基本面所驱动的。而这些随机的趋势使许多人无法得到稳定的系统。如何只用一个工具的价格系列来处理它们,我不清楚。而你在普通价格系列上的结果是相当令人惊喜的!

 

谢谢你!关于转换,我理解。在我的案例中,我想从 "只是价格 "中挤出一个结果。坦率地说,我受到了一些同志的启发,他们纯粹按价格进行交易,而且很成功(这个论坛上有这样的留言)。

我对这个结果也有点惊讶,但到目前为止,我看到这个策略的一些弱点,即缩减(即使在SOM训练期)和低交易频率。原来每个月大约有250个点。如果你在多个工具上运行它,你会得到,比如说,每月1000个点,但1)不规则,2)缩减仍会增长。

抽象地想一想,我认为在外汇市场上赚取利润(即使是在纸上)的任务几乎是一个无限的维度。因此,我试图在这个空间的不同地方 "戳",可以这么说。好吧--有时会出现局部的、不完美的、解决问题的方法。

 

alexeymosc, 如果不难,请再详细说明一下,这个话题对我来说相当有趣。对于初学者来说,给我一个准备数据的脚本,或者数据准备的方法,大体上我希望最后的结果是在mql中,而不是在exel中,如果在过渡到mql的写法上有问题,我想我们会帮助,我会学习NS的编程--我自己不懂,提前感谢。

 

))一切都已经在excel中了(我已经发布了2个档案)。我想我只是对它非常友好,我想这就是它的特点......。

但是,说到重点!

我没有剧本。但在MQL中实现条目的形成并不难。我们通过开盘价 计算过去40个柱子的最大和最小值,包括最后完成的一个。然后我们用众所周知的公式转换公开价格。(Open-Min) / (Max - Min),从而形成一个40个值的向量,其数值范围为[0;1]。

接下来,我个人更倾向于在神经包中训练SKP,并制作一个能与专家顾问沟通的dll-file。这对我来说很方便,另外,在同一个Excel中做所有的分析也很方便。你可以在MQL中对SOM训练进行编程,这也是一种选择,但我不是程序员,我不能帮助....。我可以为测试者准备一个专家顾问模板,以及一个自组织地图的dll文件,我们可以共同敲定代码本身和一些细微差别。

顺便说一下,不仅可以在日线图上交易。我在OOS期(即使是15分钟的时间)获得了利润,但缩减量很大......

 
alexeymosc:

从开盘价中计算出过去40个条形的最大和最小值,包括最后完成的条形。然后我们根据众所周知的公式来转换公开价格。(Open-Min) / (Max - Min),从而形成一个40个值的向量,其数值范围为[0;1]。

这可能就是剧本。

//+------------------------------------------------------------------+
//|                                                     SOM_data.mq4 |
//|                               https://www.mql5.com/ru/users/igorm |
//|                               https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "https://www.mql5.com/ru/users/igorm"
#property link      "https://www.mql5.com/ru/users/igorm"

extern int     NumBars = 40;
extern string  FileName = "som_data.csv";

int start(){
   int i,Max,Min,file_handle;
   double _open[];
   double out,max_min;
   ArrayResize(_open,NumBars);
   file_handle = FileOpen(FileName,FILE_CSV|FILE_WRITE);
   if(file_handle<1){
         Print("Файл ",FileName,"не открыт для записи, ошибка №", GetLastError());
         return(0);
    }
    for(i=1;i<=NumBars;i++) _open[i-1] = Open[i];
    Max = ArrayMaximum(_open);
    Min = ArrayMinimum(_open);
    max_min = _open[Max] - _open[Min];
    if (max_min ==0){
         Print("Деление на ноль, невозможно выполнить код");
         return(0);
    }
    for(i=1;i<=NumBars;i++){
        out = (Open[i]-_open[Min]) / max_min;
        FileWrite(file_handle,out);
    }
return(0);
}
//+------------------------------------------------------------------+

这段代码有点长,但不加注释应该也能理解

SZZ:我擅长使用Excel,但很少--在计算器层面))))。

 

谢谢你!

脚本是有效的,数值是正确的。

我现在正在考虑SOM文件,我会试着把它附在EA中。