编码帮助 - 页 351

 
mladen:
stevenpun 对于这一点,最简单的方法是在该指标上添加一些 "斜率方向 "的缓冲区,或者使用一些已经在缓冲区中解决了斜率问题的其他MACD。

这样吧,https://www.mql5.com/en/forum/178018/page67

但问题是我需要在代码中加入什么,我在谷歌上搜索了很多EA,但没有成功找到一些例子。

请告诉我一些例子,谢谢你的帮助。

 
stevenpun:
https://www.mql5.com/en/forum/178018/page67

但问题是我需要在代码中加入什么,我已经谷歌了很多EA,但没有成功找到一些例子。

请给我看一些例子,谢谢你的帮助。

冯小刚

这将是一个很好的例子,可以使用。

读取 "颜色 "缓冲区,当其中的值从-1变为1时,是一个买入信号,而当值从1变为-1时,是一个卖出信号("从 "是颜色缓冲区的前一个值,"到 "是当前值,或者如果你想只使用封闭的条形图,"从 "是2条前,"到 "是1条前)

 

你好。

我是新来的。我想更新一个矩形对象,但不知道怎么做。下面的代码是我用来创建矩形对象的,如果EMAs交叉。如果价格回调并触及它,这些矩形必须结束。如何做到这一点?

先谢谢你。

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

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

//| INIT() |

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

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

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

//| DEINIT() |

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

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

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

//| START() |

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

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

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

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

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

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

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

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

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

 

如何在两个或多个EA之间进行沟通?

 

NewBie's trying to develop this to MT4 build 670.帮助~

下载MetaTrader 5的 "三条移动平均线 "交易机器人(专家顾问)在MetaTrader市场?

我喜欢这个,因为我喜欢K.I.S.S.(保持简单愚蠢)。

我是一个新手,我想开发这个。

(1. version_01)

当它运行时,只要EA一开机,它就会立即建仓。

这就像从.ex5逆向工程到创建.mq4。

(2.版本_02)

在同一个图表上,可以看到从Zig-Zag中发现的每周R & S。

(3.版本_03)

添加逻辑。

--- 不要在趋势线的20点以上或以下进入。

在与周R&S相差20点时清仓。

感谢您的帮助~。

提前感谢~。

 

cosmiclifeform,有趣的是,从那时起我就无法让Nice TraderEA进行回测,所以我无法对它进行优化,我已经在alpari demo和ista forex上做过了,同样....,它一直给我空白的结果。能不能告诉我你用来回测 的技巧?

cosmiclifeform:
你好,Mastercash。

我能够下载并在策略测试器中运行NiceTrader的EA,没有任何问题。

我只是使用了默认设置,没有改变任何东西......也没有收到任何错误信息。

我没有尝试在我的演示中实时运行它......但该EA在策略测试器中运行良好。见所附图表...

你有没有收到任何日志错误信息或其他线索,为什么它不能为你交易...?

希望这有帮助。

罗伯特

 
Mastercash:
cosmiclifeform,有趣的是,我无法让Nice TraderEA进行回测,所以我无法优化它,我在alpari demo和ista forex上做过,同样的....,它一直给我空白的结果。你能告诉我你用来回测的技巧吗?

你好,Mastercash。

我在FXDD模拟账户上运行了该EA......没有做什么特别的事情......只是在策略测试器中以 默认设置运行该EA。

希望我能提供更多帮助......但如果没有具体的线索来追踪(错误日志、屏幕截图和其他条件),就不可能找出你得到空白结果的原因。

我所能建议的是...

首先在测试器中尝试一个你知道工作正常的好EA。

这将确定你的模拟账户和你的程序都没有问题。

首先让你相信一切都在按部就班地工作。

然后尝试你的Nice TraderEA......并准确地写下发生了什么。即使是一个空白的屏幕也应该有日志可查。

试着在所有地方添加PRINT和COMMENT语句......然后再次检查你的日志......包括EA标签和日志标签。

同时你的COMMENT语句会显示在屏幕上......所以你应该真正看到你的EA是否在工作。

获得良好的编码帮助的底线...

是提供你能找到的关于你的EA发生了什么的最多线索...。

继续尝试一切可能的方法...并让我们知道结果。

保重。

罗伯特

 
apprentice coder:
如何在两个或多个EA之间进行交流?

如果你的意思是是否有一些函数 或函数集专门用于此,那么答案是,没有这样的东西。

我见过不少尝试,到目前为止,我见过的那些方法没有一个在所有情况下都能发挥作用。除了一个。但有一个是我发明的,由于这个想法非常简单,我仍然不能相信没有人想到它(它甚至提供了不在同一地点的EA的通信,并且没有使用任何API),所以我为自己保留了这个解决方案(在这种情况下,我在等着看是否有人想到同样的事情)。

试着跳出预期的范围来思考吧

 
mladen:
如果你的意思是,是否有一些函数或函数集专门用于此,那么答案是,没有这样的东西。

我已经看到了不少尝试,到目前为止,我所看到的那些方式没有一个在所有情况下都有效。除了一个。但有一个是我发明的,由于这个想法非常简单,我仍然不能相信没有人想到它(它甚至提供了不在同一地点的EA的通信,而且没有使用任何API),所以我为自己保留了这个解决方案(在这种情况下,我在等待看是否有人想到同样的事情)。

请试着跳出预期的范围来思考问题。

我知道你的意思:想法的价值有时远远超过之后的制作方式。谢谢

 

你好。

亲爱的mladen,我有一个小小的请求--你能不能把下面所附的指标在左上角显示的所有信息关掉?

预先感谢;-)

附加的文件: