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

 
Yaroslav Nykula:

...所有有美元存在的货币对...

我假设代码中存在对交易资金所使用的保证金的计算--尝试以美元以外的货币开立账户,看看测试是否通过。
 
<br / translate="no">

我打算假设代码中存在对交易资金所使用的保证金的计算--尝试用美元以外的其他货币开户,看看测试是否通过。



代码中没有"从交易资金中使用的保证金 " 的计算...而在我第一篇文章的结尾,我指出"在测试器中切换存款货币 视图并不能解决这个问题。"

 
Yaroslav Nykula:

代码中没有"从交易资金中使用的保证金 " 的计算...而在我第一篇文章的结尾,我指出"在测试器中切换存款货币 类型并不能解决这个问题"。

然后我的心灵感应能力就结束了--布置密码。

 

对不起,我知道如何使用缓冲器将外部指标插入EA中...但这个指标中没有缓冲区,我怎么才能得到上、下限价格。




//+------------------------------------------------------------------+

//|                                                trendlinesDay.mq4 |

//|                      Copyright © 2008, MetaQuotes Software Corp. |

//|                                        https://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "nsi2000"

#property link      "http://www.expert-mt4.nm.ru"

//----

#property indicator_chart_window

//---- input parameters

extern int nPeriod=10;

extern int Limit=350;

   double Up[];

   double Dn[];

///---- int Widners Oscilator

int cnt,nCurBar=0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {      

//---- Output in Char

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectCreate("WSO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WSO-"+cnt,OBJPROP_COLOR,Red);

      if(cnt<5)

        {

         ObjectCreate("Trend DN-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend DN-"+cnt,OBJPROP_COLOR,Magenta);

        }

      //----

      ObjectCreate("WRO-"+cnt,OBJ_HLINE,0,0,0);

      ObjectSet("WRO-"+cnt,OBJPROP_COLOR,Blue);

      if(cnt<5)

        {

         ObjectCreate("Trend UP-"+cnt,OBJ_TREND,0,0,0,0,0);

         ObjectSet("Trend Up-"+cnt,OBJPROP_COLOR,Aqua);

        }

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custor indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//---- TODO: add your code here

   for(cnt=0; cnt<=5; cnt++)

     {

      ObjectDelete("Trend UP-"+cnt);

      ObjectDelete("Trend DN-"+cnt);

      ObjectDelete("WSO-"+cnt);

      ObjectDelete("WRO-"+cnt);

     }

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int start()

  {

//---- TODO: add your code here


   double r1,r2,r3,r4,r5,r6;

   int rt1,rt2,rt3,rt4,rt5,rt6;

   double s1,s2,s3,s4,s5,s6;

   int st1,st2,st3,st4,st5,st6;


//---- Линии сопротивления и поддержки

   if(Bars<Limit) Limit=Bars-nPeriod;

   for(nCurBar=Limit; nCurBar>0; nCurBar--)

     {

      if(Low[nCurBar+(nPeriod-1)/2]==Low[Lowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])

        {

         s6=s5; s5=s4; s4=s3; s3=s2; s2=s1; s1=Low[nCurBar+(nPeriod-1)/2];

         st6=st5; st5=st4; st4=st3; st3=st2; st2=st1; st1=nCurBar+(nPeriod-1)/2;

        }

      if(High[nCurBar+(nPeriod-1)/2]==High[Highest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])

        {

         r6=r5; r5=r4; r4=r3; r3=r2; r2=r1; r1=High[nCurBar+(nPeriod-1)/2];

         rt6=rt5; rt5=rt4; rt4=rt3; rt3=rt2; rt2=rt1; rt1=nCurBar+(nPeriod-1)/2;

        }

     }

//---- Move Object in Chart


   ObjectMove("Trend DN-0",1,Time[st1],s1);

   ObjectMove("Trend DN-0",0,Time[st2],s2);


//----

   ObjectMove("Trend UP-0",1,Time[rt1],r1);

   ObjectMove("Trend UP-0",0,Time[rt2],r2);

//----

   return(0);

  }

//+------------------------------------------------------------------+


 
Vyacheslav Kornev:

对不起,我知道如何使用缓冲器将外部指标插入EA中...在这个指标中,没有缓冲区,我如何获得上、下限价格?


在图表上取名为 "趋势DN-0"、"趋势UP-0 "的图形对象(那些表示指标的某些水平的线),并从中读取所需数据

 
Maxim Kuznetsov:

在图表上取名为 "趋势DN-0"、"趋势UP-0 "的图形对象。(指标标记一些水平的那些线)并从中读取必要的数据


请写出如何在指标本身中做到这一点? 然后从这些值中制作2个缓冲区,在EA中使用它们?

写在哪个地方取价?

 
Vyacheslav Kornev:

请写出如何在指标本身中做到这一点? 然后从这些值中制作2个缓冲区,在EA中使用它们?

写在哪个地方取价?

该指标已经拥有计算两个缓冲区并绘制的所有数据。

你没有建议改变指标,而是建议从专家顾问中读取指标所画的线的数据。
然而,这对测试器的使用造成了限制--只有在视觉模式下,你才能测试专家顾问。

 
Artyom Trishkin:

该指标已经有了所有的数据来计算这两个缓冲区并绘制它们。

没有人建议你改变指标,而是建议你从专家顾问中读取指标所画的线的数据。
然而,这对测试器的使用造成了限制--你只能在视觉模式下测试专家顾问。


这意味着我应该在指标中写上

#property indicator_buffers 2

双倍BufferUp[], BufferDn[]。


int OnInit()

{

SetIndexBuffer(0, BufferUp)。

SetIndexBuffer(1, BufferDn)

}



然后到底用什么来连接这两个缓冲区呢?

 
Vyacheslav Kornev:

所以我必须在指标中写上

#property indicator_buffers 2

双倍BufferUp[], BufferDn[]。


int OnInit()

{

SetIndexBuffer(0, BufferUp)。

SetIndexBuffer(1, BufferDn)

}



然后到底用什么来连接这两个缓冲区呢?

看:你的代码中有行在移动。

ObjectMove("Trend DN-0",1,Time[st1],s1);
ObjectMove("Trend DN-0",0,Time[st2],s2);
//----
ObjectMove("Trend UP-0",1,Time[rt1],r1);
ObjectMove("Trend UP-0",0,Time[rt2],r2);

时间[st1],时间[st2]和这些参考点的价格s1,s2是针对一条线。
Time[rt1], Time[rt2], r1, r2 - 用于另一行。

使用直线方程,你可以计算出这些点之间每个条形的缓冲值,并将这个值写入缓冲区。

 
Artyom Trishkin:

看:你的代码里有行在移动。

我们有时间[st1],时间[st2]和这些点的价格s1,s2 - 为一条线。
Time[rt1], Time[rt2], r1, r2 - 用于另一行。

使用直线方程,你可以计算出这些点之间每个条形的缓冲值,并将这个值写入缓冲区。


所以你不能只是把线上的价格拿过去......。我不知道如何计算直线方程,如果可能,请写出这一切应该是怎样的。

而且,一般来说,不应该在点之间取值,而应该在0或1巴以上取值。

原因: