如何编码? - 页 270

 

IndicatorCounted和保持指标缓冲区 的同步。

你好。

我的问题是关于在自定义指标中滑动缓冲区。我在另一个论坛上问过,但没有结果。

比如说

代码。

#define MAX_LOOK_BACK 5

#property indicator_minimum 0

#property indicator_maximum 100

#property indicator_color1 DodgerBlue

#property indicator_separate_window

double rsiBuf[];

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- the last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

limit=Bars-counted_bars;

//---- main loop

Print("indicator limit: ", limit);

if(MAX_LOOK_BACK < limit)

limit = MAX_LOOK_BACK;

//Calculate from right to left

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

{

rsiBuf = iRSI(Symbol(), NULL, 14, PRICE_CLOSE, i);

}

}

当指标运行时,将计算最近5条的最新RSI值。(为了方便测试,我设置了一个MAXLOOK_BACK的最大值),例如在limit==2的情况下(在我的测试中,当在EA中通过iCustom调用时,limit==2经常发生),那么它将计算bar 0和bar 1的值并分别写入RSI[0]和RSI[1],而不会触及缓冲区的其他部分。我见过的每个自定义指标都是这样写的。如果limit < MAX_LOOK_BACK,我们是不是应该滑动缓冲区? 因为它覆盖了RSI[0]和RSI[1],但这些元素的前值应该在RSI[2]和RSI[3]中,我说得对吗?

为了形象化:

Tick=0 AND limit = 5 ==> RSI[0] = 33.33 RSI[1] =44,44 RSI[2] =55,55 RSI[3] =66,66 RSI[4] = 77.77

现在假设最新的2个RSI值是88,88和99,99,数组将看起来像下面。

Tick=1 AND limit = 2 ==> RSI[0] = 88,88 RSI[1] =99.99 RSI[2] =55,55 RSI[3] =66,66 RSI[4] = 77.77

但不应该是这样。

Tick=1 AND limit = 2 ==> RSI[0] = 88,88 RSI[1] =99.99 RSI[2] =33,33 RSI[3] =44,44 RSI[4] = 55.55

当2个新的柱状体出现时,我们不应该把以前的柱状体数值滑动2下吗? 以前为什么所有的指标都是这样写的,没有滑动的数值。为什么他们能正确地画出趋势线。

 

我正在开发一个EA,它使用Keltner band来退出一个头寸(盈利和亏损),但是当我用2手平均下来时,EA忽略了第一个入口。除了用新的图表进场外,还有什么办法解决这个问题吗?谢谢

附加的文件:
 
mezarashii:
我正在开发一个EA,它使用Keltner band来出仓(盈利和亏损),但无论何时我用2手平均下来,EA都会忽略第一个入口。除了用新的图表进场外,还有什么办法解决这个问题吗?谢谢

在这里发布EA。

 

编码员还没有给我源代码,我希望这本身会很有用。如果有任何反馈,我们将非常感激。

附加的文件:
 

有条件删除 待定

我正在寻找一个有条件删除的脚本或代码。

基本上我希望能够执行。

如果 Ask 是 200MA H1

保持任何挂单在200MA以下开放/存活。

有什么想法吗?

 
 
 

同时获得10个货币对的每周开盘价

你好,我是MT4的新手。我试图通过编写一个脚本来自动化我的技术,同时获取10个货币对的周开盘价。我无法使用单一的EA或脚本来逐一访问周线图。谁能告诉我什么是最好的方法?非常感谢 .....

 
novalight:
你好,我是MT4的新手。我试图通过编写一个脚本来自动化我的技术,同时访问10个货币对的每周开盘价。我不能使用单一的EA或脚本来逐一访问周线图。谁能告诉我什么是最好的方法?非常感谢 .....

你好。

你需要结合iOpen功能。

例如,假设你想在评论中显示gbpusd、eurusd和usdjpy的公开价格

那么代码片段会是这样的。

double openPair1 = iOpen("EURUSD",PERIOD_W1,0);

double openPair2 = iOpen("GBPUSD",PERIOD_W1,0);

double openPair3 = iOpen("USDJPY",PERIOD_W1,0);

Comment("EURUSD weekly open:"+openPair1+nGBPUSD每周开盘。"+openPair1+"nUSDJPY每周开盘。"+openPair1)。

 

我更喜欢把配对作为输入,同时还有两个额外的输入。

前缀和后缀的输入避免了经纪人在基本配对名称上添加东西时的麻烦。

extern string pair_preffix = "";

extern string pair_suffix = ""; //为IBFX迷你账户输入m

extern string pair1 = "EURUSD;

extern string pair2 = "GBPUSD";

extern string pair3 = "USDJPY";

字符串 myPair1, myPair2, myPair3;

int init()

{

myPair1 = pair_prefix + pair1 + pair_suffix;

myPair2 = pair_prefix + pair2 + pair_suffix;

myPair3 = pair_prefix + pair3 + pair_suffix;

返回(0)。

}

int start()

{

double openPair1 = iOpen(myPair1, PERIOD_W1,0);

double openPair2 = iOpen(myPair2, PERIOD_W1,0);

double openPair3 = iOpen(myPair3, PERIOD_W1,0);

评论(pair1+"每周开盘。"+openPair1+"/n" + pair2 + " 每周开盘。"+openPair2+"\n" + pair3 " 每周开盘。"+openPair3)。

}

当然,当使用10个货币对时,我会使用数组来做这个。

Robert Hill aka MrPip