新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 197

 
Aleksandr Verkhozin:


我看了关于使用外部指标的视频,写了一点代码来查看测试器中的缓冲区数值。

空白的OnTick()

{

double Buf1=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",0,1)。

double Buf2=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",1,1)。

double Buf3=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",2,1)。

double Buf4=iCustom(NULL,0, "Shved-Supply-and-Demand-e600",3,1)。

Comment("Buf1=",Buf1,"\n", "Buf2=",Buf2,"\n","Buf3=",Buf3,"\n","Buf4=",Buf4);

}

这些区域在可视化模式下出现和消失。但无论如何,缓冲区的值总是为零。是否没有办法在代码中正式规定这些区域?

也许除了iCustom之外,还有一个函数适合这种指标?也许,有人写过带有这种指标的猫头鹰?


没有办法使用指标缓冲区,它们存储的是分形值。

在指标属性中fractals_show = true;你将在图表上看到它们。

区域,图形对象 OBJ_RECTANGLE

你可以用以下方法获得这些区域的值


读取对象

返回一个指定的对象属性的值。

doubleObjectGet(
stringobject_name,// 对象名称
intindex// 属性标识符
);


你在所有的物体中循环,找到正确的物体,并找到路径。

 int obj_total=ObjectsTotal(); 
  string name; 
  for(int i=0;i<obj_total;i++) 
    { 
     name = ObjectName(i);
     Print(i," - объект ",name); 
    }

大约,它看起来像这样

 
Artyom Trishkin:
你知道吗,就在这个主题中,我发布了一个拖网的模板,在计算中使用发送到它的指标值。查一查,别偷懒。

我需要一个正确的未平仓头寸 的追踪止损。 最后有1或3个,它们由步骤值连接,即止损/反向系统。或者使用CalculateProfit()函数对所有订单进行跟踪更容易。现在我搞不清楚这个订单处理方案中的指标值如何与追踪未结头寸的总利润有关。
 
geratdc:

我需要对未结头寸的 利润进行准确的追踪止损。 最后有1或3个,它们受步骤值的约束,即这是一个止损和反向系统。或者使用CalculateProfit()函数对所有订单进行跟踪更容易。现在我搞不清楚这个订单处理方案中的指标值如何与追踪未结头寸的总利润有关。

该指标,它的值,可以是一个其他的值,例如,所需条形图上的MAK。为移动头寸的总止损而计算出的价格值可以被送到拖网中。

然而,不清楚你有什么样的拖网在开放位置--它到底拖什么和什么时候拖。

 
geratdc: 我正在寻找正确的拖网获利方式

所有的小路都在这里。我从文件TrailingFuncLib.mq4中提取了函数TrailingStairs - STANDARD-STANDARD Trailing。每个订单都是独立跟踪的。

 
Artyom Trishkin:

该指标,它的值,可以是一个其他的值,例如,所需条形图上的MAK。为移动头寸的总止损而计算出的价格值可以被送到拖网中。

然而,不清楚你有什么样的拖网在开放位置--它到底拖什么和什么时候拖。


原则上,是的,我曾经被提出按平均价格进行拖网。一切似乎都合乎逻辑,但这意味着什么--平均价格?它是(1个订单的价格+步骤*点+(2个订单的价格+步骤*点)+3个订单的价格)/3?所以它有很多参数--你必须调出未结头寸和每个头寸的当前价格。总之,这种跟踪止损比EA在测试中损失价值的事实更让我困扰。在实际交易中会发生什么?它可以被设置,但我们又不知道货币图表在一周或一个月内会出现哪种转折,所以有一个弱点--如果开了3个订单,而市场上出现了逆向运动,专家顾问将因缩减而失败。因此,我们应该考虑限制缩减,在存款归零之前平仓。长话短说,我最感兴趣的是福克斯))))。
 

我自己也搞不清楚,也没有找到任何具体的资料((想法是在代码中标记价格边界,即指标建立的最近的区域。我开始写代码,但我很困惑,不知道我做的是否正确。我不知道我这样做是对还是错。

 int obj_total=ObjectsTotal();       

  string name; 

  for(int i=0;i<obj_total;i++)

  {

  name = ObjectName(i); 

  if(ObjectType(name)==OBJ_RECTANGLE)

  {

    pr1=ObjectGet(name,OBJPROP_PRICE1);// верхняя цена зоны

    pr2=ObjectGet(name,OBJPROP_PRICE2);// нижняя цена зоны

  }  

  }  

还有,为什么我的代码没有插入这里,就像在原版中一样,以多色和线条相邻?
附加的文件:
 
-Aleks-:

想通了--显然终端没有足够的内存--关闭了几个图表就成功了。

谢谢你--的确,计算发生了。

如果变量不是int类型,而是bool,该怎么做?


//+------------------------------------------------------------------+
//|                                                       Decode.mq4 |
//|                                            Copyright 2017, Vinin |
//|                                             http://vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Vinin"
#property link      "http://vinin.ucoz.ru"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int N=162;  //0..162
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for (int n=0;n<N;n++)
   {
      int tmp=n;
      int a=(int) MathMod(tmp,3);
      tmp=(tmp-a)/3;
      int b=(int) MathMod(tmp,3);
      tmp=(tmp-b)/3;
      bool c= (bool) MathMod(tmp,2);
      tmp=(tmp-c)/2;
      int d=tmp;
   
      Print("N=",n,"; A=", 2+2*a, "; B=", b+1,"; C=",c,"; D=", 16+4*d);
   }
  }
//+------------------------------------------------------------------+
 
Victor Nikolaev:

对不起,但这个代码与上一个代码不同吗?
 
-Aleks-:

对不起,但这个代码与上一个代码不同吗?


差异是最小的。其中一个变量是逻辑的。

输出将显示真或假

 
Victor Nikolaev:


差异是最小的。其中一个变量是逻辑的。

输出将显示真或假

你确定你看了你最后发布的代码吗?如果是这样,我需要休息一下......谢谢你。
原因: