编码帮助 - 页 352

 
freakout:
你好。

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

提前感谢;-)

做一个选项来打开/关闭评论。

附加的文件:
 
paradise77:
你好。

我是新来的。我想更新一个矩形对象,但不知道怎么做。下面的代码是我用来创建矩形对象的,如果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");

}

}

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

姆拉登,

你能不能帮我提供一个关于编辑矩形的线索?

我发现这个:

*)对象类型 - MQL4文档

*)对象属性 - MQL4文档

我可以获得矩形属性(时间1,价格1,时间2,价格2,颜色),然后将价格1或价格2与当前的Ask/Bid价格进行比较。如果Ask/Bid价格触及价格1或价格2,那么必须做以下工作。

a) 我不需要数组,只需要查看每个矩形对象。

删除该对象,使用新的时间2和新的颜色重新创建它。

b) 如何知道 OBJPROP_PRICE1的蜡烛位置? 我们通常使用 "for "循环,如

for (i=limit; i>0; i--)

我们怎样才能得到拥有price1的那根柱子的 "i "呢?

c) 如果我不删除和重新创建矩形,我可以只使用ObjectSet来改变矩形的时间2和颜色吗?

谢谢你。

 
paradise77:
@Mladen,

你能帮助我提供一个关于编辑矩形的线索吗?

我发现了这个。

*)对象类型 - MQL4文档

*)对象属性 - MQL4文档

我可以获得矩形属性(时间1,价格1,时间2,价格2,颜色),然后将价格1或价格2与当前的Ask/Bid价格进行比较。如果Ask/Bid价格触及价格1或价格2,那么必须做以下工作。

a) 我不需要数组,只需要查看每个矩形对象。

删除该对象,使用新的时间2和新的颜色重新创建它。

b) 如何知道 OBJPROP_PRICE1的蜡烛位置? 我们通常使用 "for "循环,如

我们怎样才能得到价格为1的柱子的 "i"?

c) 如果我不删除和重新创建矩形,我可以只使用ObjectSet来改变矩形的时间2和颜色吗?

谢谢你。

在你的情况下,你的价格是可以的。你必须用时间来限制左右两边的盒子。

 

宇宙的生命形态。

谢谢你的这篇稿子,其实我用的是instaforex demo.我按照正常的方法下载了1M的价格fiest.I然后做了设置,用EURUSD,看到下面的报告标签和日志的截屏。

//reports, noting but zerp, why?

cosmiclifeform:
你好,Mastercash。

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

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

我所能建议的是...

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

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

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

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

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

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

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

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

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

保重。

罗伯特
附加的文件:
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
在你的情况下,你的价格是可以的。你必须用时间来限制左右两边的盒子

谢谢mladen。你的意思是我必须动态地使用Time2吗?时间1,价格1和价格2是固定的。但是时间2取决于当前的条形(i),并且是移动的,直到价格触及矩形,或者它超过了默认的矩形设置时间。

换句话说,不可能改变一个矩形的颜色和时间2?

谢谢

 
paradise77:
谢谢mladen。你是说我必须动态地使用时间2吗?时间1,价格1和价格2是固定的。但是时间2取决于当前的条形(i),并且是移动的,直到价格触及矩形,或者它超过了默认的矩形设置时间。

换句话说,不可能改变一个矩形的颜色和时间2?

谢谢

天堂77

是的,你必须

这样你就会一直调整盒子的右边界(当然,如果它需要调整的话)。

 

Mladen先生和Mrtools先生好。

我真的不喜欢太多的警报,因为我比较喜欢视觉系统,所以所有的噪音和弹出窗口只会让我分心。我只在超卖或超买时设置一些CCI的警报,仅此而已。

但有一个警报是我想要的,那就是当 "我的 "SSA + MA与MA交叉时,无论是向上还是向下。

还有一件事,我总是给这个可爱的工具添加三个级别;当然是零点,也包括-0.3和0.3。

我还想在SSA越过-0.3水平和0.3水平时获得一个警报。0.0水平则没有必要。

作为警报,只需要一个简单的声音和弹出窗口,就可以了。

谢谢您!

附加的文件:
ssa__ma.mq4  5 kb
 
Wulong10:
你好,Mladen先生和Mrtools先生。

我真的不喜欢太多的警报,因为我比较喜欢视觉系统,所以所有的噪音和弹出窗口只会让我分心。我只在超卖或超买时设置一些CCI的警报,仅此而已。

但有一个警报是我想要的,那就是当 "我的 "SSA + MA与MA交叉时,无论是向上还是向下。

还有一件事,我总是给这个可爱的工具添加三个级别;当然是零点,也包括-0.3和0.3。

我还想在SSA越过-0.3水平和0.3水平时获得一个警报。0.0水平则没有必要。

作为警报,只需要一个简单的声音和弹出窗口,就可以了。

谢谢您!

Wulong10

SSA的问题是,它是一个重新计算的算法。至少在我看来,给它添加警报 是不明智的,因为它总是会改变交叉点的位置,有时交叉点会完全消失。最好是在非信号模式下使用它(仅估算)。

 

你好,姆拉登。

我知道SSA在更高的时间范围内会重新计算。

当我在M5上使用它时,它会有一些变化,在M15上会有更多的变化,但在M1上我已经对这个独立测试了很多次,我对它非常满意。在我的设置下,它真的不怎么适应,事实上它非常准确。

当然,当价格出现长期上涨或长期下跌时,它不是很可靠,但很多指标不都是这样吗?

然后你在图表上使用一个简单的移动平均线 以确保安全......

也许其他人不能使用警报,但我可以。

CCI的警报也不总是正确的,但它只是指示接下来可能会发生什么。

因此,如果社会保障局会发出警报,那就由我来决定如何处理,我在这方面越来越擅长了。

此外,我想我不是唯一一个喜欢SSA的人......

消失的十字架?在M1上并不常见,而我已经观察该图表好几天了......

所以,如果可能的话,我真的希望得到提醒。

谢谢你!

 
Wulong10:
嗨,Mladen。

我知道SSA在更高的时间框架上会重新计算。

当我在M5上使用它时,它会有一些变化,在M15上会有更多的变化,但在M1上,我已经对这个indy进行了多次测试,我对它非常满意。在我的设置下,它真的不怎么适应,事实上它非常准确。

当然,当价格出现长期上涨或长期下跌时,它不是很可靠,但很多指标不都是这样吗?

然后你在图表上使用一个简单的移动平均线以确保安全......

也许其他人不能使用警报,但我可以。

CCI的警报也不总是正确的,但它只是指示接下来可能会发生什么。

因此,如果社会保障局会发出警报,那就由我来决定如何处理,我在这方面越来越擅长了。

此外,我想我不是唯一一个喜欢SSA的人......

消失的十字架?在M1上并不常见,而我已经观察该图表好几天了......

所以,如果可能的话,我真的希望得到提醒。

丹克-谢恩!

Wulong10

SSA总是重新计算(相信我,因为是我做了那个dll来计算它)。这个规则没有例外(不管你在什么时间段使用它)。

另外,如果计算的数量被设置为>1,它将重新计算所有的条形。如果计算次数设置为1,那么至少要重新计算 "滞后 "条形图。