摩尔斯电码 - 页 4

 

我省去了"模式的长度"参数,以指定数字模式的长度(该参数仅用于优化模式)。

#property version   "1.003"
#property description "Bull candle - \"1\", bear candle - \"0\""
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_TYPE
  {
   PATTERN_TYPE_NUMERICAL=0,  // numerical
   PATTERN_TYPE_STRING=1,     // string 
  };
//---
input ENUM_PATTERN_TYPE    InpPatternType          = PATTERN_TYPE_STRING;  // pattern type
input uchar                InpLenNumerical         = 3;                    // length of the pattern (use only if pattern "numerical")
input string               InpsMorseCode           = "101";                // string Morse code (max 5 characters)
input ENUM_POSITION_TYPE   InpPosType              = POSITION_TYPE_BUY;    // posinion type
input double               InpLot                  = 0.1;                  // lot
sinput ulong               m_magic                 = 88430400;             // magic number
input ulong                m_slippage              = 30;                   // slippage
//---
string sExtMorseCode="";
int max_string_len=5;         // limitation of the length of the pattern "string"
int i_morse_code=0;           // int Morse code (use only if pattern type=numerical)
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(InpPatternType==PATTERN_TYPE_STRING)
     {
      //--- check start mode
      if(MQLInfoInteger(MQL_OPTIMIZATION))
         return(INIT_PARAMETERS_INCORRECT);
      //--- info print
      Print("The type of the pattern \"string\" is set - the parameters \"pattern length\" and \"int Morse code\" are ignored");

      sExtMorseCode=InpsMorseCode;

还有一个简单的辩护--如果你在优化模式下选择一个字符串模式类型,专家顾问将返回 "INIT_PARAMETERS_INCORRECT"

 
Vitalii Ananev:


你必须马上想到所有的事情,这样你就不必在以后重做。

....

再次,如果我们回到 "黄昏之星 "形态,它可以被看作是一个看涨的小蜡烛--熊市和一个看涨的熊市接管。这意味着我们有一个由看涨蜡烛和看跌吸收组成的复合模式。而如果我们将所有三个蜡烛图的形态相加,我们又会得到一个针形柱。



让我插入我的5戈比。

这个任务还没有定下来,不可能一下子预见所有的事情。 在这种情况下,最初的概念应该是主要的概念将被丢失:用户建立一个看涨和看跌的蜡烛图序列,程序寻找这些序列和交易,为什么要把它们总结为一个模式?

 
Pyxis:


请允许我插入我的五分钱。

这不是任务,而且不可能一下子提供所有的东西,在这种情况下,我们就失去了原来的概念,而这个概念被设想为主要的概念:用户做出看涨和看跌的蜡烛序列,程序寻找这些序列并进行交易,那么为什么要把蜡烛总结成一个单一的模式?


我们为什么要对它们进行总结?那么,比如说,为了简化模型。事实上,它被作为一个例子。

为什么不可能呢?所有经常出现的日本蜡烛图的 组合都可以用一种方式进行编码。另一件事是,第1位(我在上面写过)是不够的,你必须使用至少2位,如果你不总结(简化)模式模型,它们也是不够的。

 

到目前为止,莫尔斯码版本 "1.003":你可以手动指定模式的字符串描述,甚至在测试器中运行单次通过。

附加的文件:
Morse_code.mq5  15 kb
 
Vladimir Karputov:


这个程序将被一个用户使用,而不是一个程序员(上面说了,而且不是一次)--对他来说,"101 "和 "5 "是两个不同的数字,对他来说,"5 "不包含任何关于蜡烛的相对位置的信息,但 "101 "明确表示 "看涨、看跌、看涨"。

明白了。好吧,那么--一串符号和一个解析器。我认为这是最灵活的选择。
 
George Merts:

我不太明白--这些是程序员还是吸血虫?

为什么要把某样东西翻译成某样东西?

如果我们需要一个代码101--那就是正常值5。就是这样,有什么问题吗?从十进制到二进制的心理转换?

我做了类似的实验,只是我的蜡烛多了四个尺寸--从小到大。这使得八种不同的蜡烛尺寸。因此,也就有了三个比特。在图案中,我们写的是数字(ulong)--网格比二十条图案中的大。

在我看来,这个问题很牵强

先整理一下,然后再批评。这里有一个任务供你思考。

对下列烛台组合的数字int进行编码。

  • 1011;
  • 01011;
  • 001011

提示:这些是不同的组合。

乔治-默茨
明白了。好吧,那么--字符串和解析器。对我来说,这似乎是最灵活的选择。
再次强调:optimizer_not_optimize_string_parameters。如果没有优化器,你将如何搜索盈利模式的组合?
 
Vasiliy Sokolov:
再次强调:优化器_将不优化_字符串 参数。如果没有优化器,你将如何搜索盈利模式的组合?

如果需要一个优化器,我认为用户应该足够 "精明",能够将数字翻译成二进制代码(至少用普通的Windows计算器)。

朋友们,你们有一个矛盾的要求。如果一个用户是这样一个傻瓜,他/她不能用计算器把二进制代码翻译成十进制代码--他/她无论如何也不能处理优化。他/她最多只需运行一次就能找到最佳价值。

如果用户在使用优化器方面足够高级,那么用普通的无符号长编码输入参数是合理的。

 
Vasiliy Sokolov:

先弄清楚,然后再批评。这里有一个发人深省的任务给你。

用以下的蜡烛组合对数字int进行编码。

  • 1011;
  • 01011;
  • 001011

提示:这些是不同的组合。

此外--它们的长度不同。第一个组合--包括四个六位数的组合。

第二个组合包括两个六位的1。

相应地,我们在优化过程中应该只取64个六位的组合。

此外,最后一个是前两个选项的子集,而倒数第二个是第一个选项的子集。

因此,在登记最后一个组合的时候,我们必须同时确定第二个和第一个组合。在我看来,这显然是一个不正确的要求。

 
这个活动的目的是什么--找到最有利可图的序列?你不需要一个机器人或测试器 - 一个指标,其中规定了序列的长度和平仓 的规则(通过TP或相反的信号或其他任何地方),这就足够了。该指标将对指定长度的序列和指定深度的历史内的所有变体进行编码,它将整理出结果(包括缩减)并在你想要的地方打印。但这个问题看起来确实很牵强。好吧,如果它不是像0101那样的猜谜玩具来占用用户的时间的话
 
George Merts:

相应地,在优化时--只需采取64个六位数的组合。

问题:市场上出现符合要求的64位数字的组合的概率是多少?答案:(1/2^64)*BarsCount。这意味着几乎有100%的概率不会找到这样的组合。很明显,只有一个数字int或long不能完全描述模式,所以我们需要一个额外的参数来指定模式的长度。

以这样的小步子思考,你很快就会得出我在第二页所说的结论。