任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 790

 
Forexman77:

这个问题并没有被驳回。所以,首先。

找到一个最大值,然后对照它画出一条线。检查该最高线与当前最低线之间的距离。如果它超过了 "Rmax",则在发现最大值的栏上设置一个箭头。箭头已放置,但不在那里。为了清楚起见,我添加了显示差异的缓冲区 "BufferLow[i]",它的数据可以在资源管理器窗口看到。

事情总是这样的。你不能在冬天等着下雪)我自己做的。

如果有人被这样一个类似的想法所折磨,这里是代码。

#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property  indicator_color1 Magenta
#property  indicator_color2 Aqua
#property  indicator_color3 SlateBlue
#property  indicator_color4 SlateBlue
#property  indicator_color5 clrNONE
//--- input parameters
extern int       Period_=10;
extern double diapazon  =0.003;
//--- buffers
double Max[];
double Min[];
double MaxIndex[];
double MinIndex[];
double rAZNOST[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexBuffer(0,MaxIndex);
   SetIndexBuffer(1,MinIndex);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,116);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,116);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(2,Max);
   SetIndexBuffer(3,Min);
   SetIndexBuffer(4,rAZNOST);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),limit, i,k,r,p,t,f;
    double minimum,maximum,Dmax,Dmin;
   if(counted_bars>0)
      counted_bars--;  
   limit=Bars-counted_bars;
   for(i=0;i<limit;i++)
   {
      maximum=High[iHighest(NULL,0,MODE_HIGH,Period_,i)];
      minimum=Low[iLowest(NULL,0,MODE_LOW,Period_,i)];
      Max[i]=maximum;
      Min[i]=minimum;
   }
   for(i=0;i<limit;i++)
   {
      k=iHighest(NULL,0,MODE_HIGH,Period_,i);
      t=iLowest(NULL,0,MODE_LOW,Period_,i);
      Dmax=Max[i]-Low[i];
      Dmin=High[i]-Min[i];
      if (Dmax > diapazon){p=k;for(r=p;r>=k;r--)MaxIndex[k]=Max[k];}
      if (Dmin > diapazon){p=t;for(f=p;f>=t;f--)MinIndex[t]=Min[t];}
      if (MaxIndex[i]==Max[i+1])MaxIndex[i]=0;
      if (MinIndex[i]==Min[i+1])MinIndex[i]=0;
      rAZNOST[i]=Max[i]-Min[i];
   }
   return(0);
  }
 
Awwl:

内置的平成指数看起来有点不发达(我不知道这是否只是我在745上的问题?而且也不清楚WmiFor是如何建立的!

在Heiken Ashi代码中,蜡烛是由4条柱状图绘制而成。

也就是说,随着缓冲区数量的增加(从0到3),新的条形图被画在旧的条形图之上。顺序如下。

LowHigh - HighLow - Open - Close。

烛台的顺序应如下,以获得其适当的外观,有体有尾。

max(Open,Close)//粗色线// - min(Open,Close)//粗白色// - High//粗色线// - Low//粗白色//。

让我们来编译这个指标,把它放在图表上,看看所有的问题(见图)。

但这种方法,像Heiken Ashi一样,有一个缺点--在每个 "蜡烛 "下,我们得到一个背景颜色的白色循环,覆盖了所有较低的东西。但有了WmiFor,一切都变得完美了!未记录的功能

第一张图片--平价(放在一个单独的窗口中),第二张图片--WmiFor,为了清晰起见,背景是浅绿色的。

我们正在比较一个软的和圆的?如果Haken是为图表窗口设计的,并在那里绘制成具有阴影和主体的蜡烛图,为什么要把它放在一个单独的窗口里?如果缓冲区的值发生变化,同一个条形图将改变其大小,不会在其上面绘制新的条形图。

MT4没有烛台形式的画法,所以只能画柱状图,如何计算那里的缓冲值是你自己的事。顺便说一下,WmiFor也是用直方图来画的。 让我们把它也放在一个单独的窗口里,然后盯着它的故障)))。

为了使独立窗口中的烛台看起来像有阴影的烛台,它们应该像加速器一样被相对画成0。或者你可以把它们画成对象,比如说All_Stars

 

大家下午好!

我的大脑很模糊,我在文档中没有找到答案,但也许有人遇到过。这里是专家顾问中的线(正向交易的分数)。

Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ,2/5*100," ,100*2/5) 。

将其打印到日记中(如)。

3/6=0.00=0 0 40

同时,如果解决方案是1。

3/3=1.00=1 0 40

变量BestOd=OderPluseCount/OderTotal是双倍类型,其余是int类型。

也就是说,只要遇到一个小于1的值,编译器就会自动将其变成0...来自常数的最后两个表达式产生了令人惊讶的结果--看起来像同样的事情,但不是))))

我尝试了不同的替代方法--所有大于1的部分 都有正确的分数。

 
Igor_:

大家下午好!

我的大脑很模糊,我在文档中没有找到答案,但也许有人遇到过。这里是专家顾问中的线(正向交易的分数)。

Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ,2/5*100," ,100*2/5) 。

将其打印到日记中(如)。

3/6=0.00=0 0 40

同时,如果解决方案是1。

3/3=1.00=1 0 40

变量BestOd=OderPluseCount/OderTotal是双倍类型,其余是int类型。

也就是说,只要遇到一个小于1的值,编译器就会自动将其变成0...来自常数的最后两个表达式产生了令人惊讶的结果--看起来像同样的事情,但不是))))

我尝试了不同的替代方法,所有大于1的部分都有正确的分数。

试试这个

DoubleToStr((double)(OderPluseCount/OderTotal),2)

 
AlexeyVik:

试试这个

DoubleToStr((double)(OderPluseCount/OderTotal),2)

没有帮助。但是谢谢你 )
 
Igor_:
这并没有什么帮助。但是谢谢你 )
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)) ,2)
 
Vinin:
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)) ,2)

它是这样工作的,谢谢你。看起来像萨满教))))

老实说,我更担心的不是显示,而是正确的BestOd 计算。也不得不纠正它。

我是这样做的。

BestOd=(OderPluseCount/(OderTotal*1.0))。

对此有什么解释吗?毕竟,如果不是印刷品,就很难发现这个错误。在什么情况下可能发生?

 
Igor_:

它是这样工作的,谢谢你。听起来像萨满教)))。

说实话,我更担心的不是显示,而是BestOd的 正确计算。也不得不纠正它。

我是这样做的。

BestOd=(OderPluseCount/(OderTotal*1.0))。

对此有什么解释吗?毕竟,如果不是印刷品,就很难发现这个错误。在什么情况下会突然出现?

在任何带有整数值的操作中,其结果将是一个整数。
 

我自己在参考书的"类型转换"部分找到了答案。

Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме: 

但这个方案中的双倍类型是最资深的。而我有这两份资料。因此,结果是整数。引入一个更高类型的常数(double, float),将所有的int转换为它。

你要学习很长时间,并查阅文件)))。

 
你好,我有以下问题。
我应该如何制作一个通过并修改未结头寸的 EA,使其不会在下一环节重复修改已经修改过的订单。你必须以某种方式给它们 "上油"。
我什么都想不出来。
我将非常感激。