编码帮助 - 页 195 1...188189190191192193194195196197198199200201202...786 新评论 Mladen Rakic 2013.11.11 14:22 #1941 shtopr: спасибо за ответ.采矿业,H1,M30,M15,M5,M1 по-прежнему работает только один цвет, красный. 这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项 kingsleyedeh4re 2013.11.11 15:21 #1942 mladen: 这里有一个使用单栏的版本。如果你希望有第三种颜色,你需要添加一个新的选项 在2分钟的仁科实时图表上,它的顶部只有2根绿色的柱子,这就是我累了的所有货币对的情况,这正常吗? Mladen Rakic 2013.11.11 15:53 #1943 drunkpips: 在2分钟的renko实时图表上,顶部只有2个绿色的柱子,这就是我累了的所有货币对的情况,这正常吗? 我不使用renko图表 它使用的是内置指标(iBEarsPower()和iBullsPower()),所以如果它出现了一些问题,那么问题就出在内置指标本身。 egorr 2013.11.11 16:14 #1944 mladen: 这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项 谈到这个问题,我想说的是:"我想说的是:"我想说的是:"我想说的是:Спасибо!!! BigBe 2013.11.11 18:08 #1945 mladen。 我研究了第1874号帖子中的 "简单的MTF",并进行了操作。 注意:它是一个MA的MA,而且是MTF能力。 我有一些问题。 无论我对代码做什么,我都无法理解'returnBars'的作用,如果有的话。 1.是什么决定了目标时间框架内的变化条数是否是必需的,为什么? 2.关于这一行。 returnBars = TimeFrame == "returnBars"; // 检查是否需要改变的条数。 我不是一个高学历的程序员。 我不知道这种复合结构。我也不知道混合变量类型的规则。 看起来,字符串变量Timeframe正在获取布尔值returnBars的值。 然后再把这个值赋给returnBars--再一次。?? 由于returnBars是布尔值,如果TimeFrame大于0,则赋值为'1',否则赋值为'0' ? 3.我将指标设置为更高的TF,并现场(向前)测试许多条,或在策略测试器中 测试。 我可以消除使用它的那条线,并且在指标线上没有变化。 if (returnBars) Comment("returnBars",returnBars, " Tick ",Volume(0))。 // 如果(returnBars) { ma1[0] = limit+1; return(0); } 屏幕上的注释行将显示 "returnBars 1"。 我不知道它从哪里得到'1'的值。 没有 "如果 "部分,它总是显示 "0"。 如果放在Init()中,结果也一样。 大的是 DoEasy 函数库中的时间序列(第五十七部分):存储一次即时报价数据的对象 DoEasy 函数库中的时间序列(第五十六部分):自定义指标对象,从集合中的指标对象获取数据 创建多交易品种、多周期指标 Mladen Rakic 2013.11.11 18:23 #1946 Big Be: 毫升登。我研究了第1874号帖子中的 "简单的MTF",并进行了操作。注意:它是一个MA的MA,而且是MTF能力。我有一些问题。无论我对代码做什么,我都无法理解'returnBars'的作用,如果有的话。1.是什么决定了目标时间框架内的变化条数是否是必需的,为什么?2.关于这一行。returnBars = TimeFrame == "returnBars"; // 检查是否需要改变的条数。我不是一个高学历的程序员。我不知道这种复合结构。我也不知道混合变量类型的规则。看起来,字符串变量Timeframe正在获取布尔值returnBars的值。然后再把这个值赋给returnBars--再一次。??由于returnBars是布尔值,如果TimeFrame大于0,则赋值为'1',否则赋值为'0' ?3.我将指标设置为更高的TF,并现场(向前)测试许多条,或在策略测试器中测试。我可以消除使用它的那条线,并且在指标线上没有变化。if (returnBars) Comment("returnBars",returnBars, " Tick ",Volume(0))。// 如果(returnBars) { ma1[0] = limit+1; return(0); }屏幕上的注释行将显示 "returnBars 1"。我不知道它从哪里得到'1'的值。没有 "如果 "部分,它总是显示 "0"。如果放在Init()中,结果也一样。 大贝 大的是 想象一下: 1.你在一个15分钟的图表上工作,你的指标显示的是1小时的数据。在15分钟图上,最后一个刻度有多少条变化,在1小时图上有多少条变化?返回条形图就是检查 这个。这个数字不一定是任何假设值(选择一个你很久没有从图表中访问的时间框架,看看当metatrader开始下载该时间框架的数据时会发生什么--你必须检查有多少新条形被下载,否则你将不得不在时间框架中来回跳跃,以便对一个多时间框架指标的过去条形有一个准确的状态)。 2.of returnBars = TimeFrame == "returnBars"。 你有一个赋值("=")和一个逻辑比较("=="),这意味着returnBars应该接收两个字符串(TimeFrame和 "returnBars")的逻辑比较结果。 3.return bars是一个布尔类型的变量。它可以有两个值:0等于 "假",1等于 "真"。这就是为什么你在returnBars中得到1(意味着returnBars被设置为 "真")。 ______________ PS:如果是C/C++的布尔规则,那么任何不同于0的值都会被认为是真,你可以用同样的方式测试metatrader变量(例如if(someDoubleValue)将测试someDoubleValue是否不同于0),但是metatrader将0和1分配给布尔型变量 -IXI- 2013.11.12 09:45 #1947 亲爱的Mladen 我不明白Poalln指标是如何重绘的。我知道iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8)或iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8)意味着未来的数值,但是在计算最后一栏时,没有i-8的数据。 我认为它应该是零。那么,Pollan是如何重绘的呢? 最好。 Mladen Rakic 2013.11.12 09:49 #1948 -IXI-: 亲爱的Mladen我不明白Poalln指标是如何重绘的。我知道iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8)或iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8)意味着未来的数值,但是当计算最后一栏时,没有i-8的数据。 我认为它应该是零。那么,Pollan是如何重绘的呢? 最好的。 IXI 在当前条形图中,它得到的是这些条形图的数值为0。在第一个过去的条形图上,它得到1个未来值和7个零。以此类推。 随着新条形图的形成,原来得到零的未来值结果的条形图实际上得到了真正的未来结果,然后这些值根据这些 "新 "的未来值被改变。 Georgebaker 2013.11.13 18:10 #1949 我怎样才能让这个指标在日元对上工作? 你好。 这个指标在每个整数上 都有一条线,在整数的两侧各有一条15点的线。 但它在日元对上不起作用。 为了使其发挥作用,需要做哪些改变? #property indicator_chart_window extern color UpperLineColor = Red; extern color MainLineColor = Red; extern color LowerLineColor = Red; extern double HighOffset = 150; extern double LowOffset = 150; extern int LineStyle = 2; extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot"; double LineSpaceOld; double Hoch; double Tief; bool FirstRun = true; double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent) string LineText = "RoundNr "; string LineText1 = "RoundNr1 "; string LineText2 = "RoundNr2 "; int deinit() { double AbSpace = 0.01*LineSpace; double Oben = MathRound(110*Hoch)/100; double Unten = MathRound(80*Tief)/100; for(double i=0; i<=Oben; i+=AbSpace) { if(i<Unten) { continue; } ObjectDelete(LineText+DoubleToStr(i,2)); ObjectDelete(LineText1+DoubleToStr(i,2)); ObjectDelete(LineText2+DoubleToStr(i,2)); } return(0); } int start() { if(FirstRun) { Hoch = NormalizeDouble( High, 2 ); Tief = NormalizeDouble( Low, 2 ); FirstRun = false; } else if(LineSpace != LineSpaceOld) { deinit(); Hoch = NormalizeDouble( High, 2 ); Tief = NormalizeDouble( Low, 2 ); } DrawLines(); LineSpaceOld = LineSpace; return(0); } void DrawLines() { double AbSpace = 0.01*LineSpace; double Oben = MathRound(110*Hoch)/100; double Unten = MathRound(80*Tief)/100; for(double i=0; i<=Oben; i+=AbSpace) { if(i<Unten) { continue; } string StringNr = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow { ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i); ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle); ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor); } else // Adjustments { ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i); ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle); ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor); } //####################################################################### if(i<Unten) { continue; } string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow { ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000)); ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle); ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor); } else // Adjustments { ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000)); ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle); ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor); } //####################################################################### if(i<Unten) { continue; } string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow { ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000)); ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle); ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor); } else // Adjustments { ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000)); ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle); ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor); } } WindowRedraw(); } Coding help [ARCHIVE]Any rookie question, so Using the price level Mladen Rakic 2013.11.13 19:50 #1950 Georgebaker: 你好。这种方法在每个整数上都有一条线,在整数的两侧各有一条15点的线。 但它对日元对不起作用。 为了使其发挥作用,需要做哪些改变? #property indicator_chart_window extern color UpperLineColor = Red; extern color MainLineColor = Red; extern color LowerLineColor = Red; extern double HighOffset = 150; extern double LowOffset = 150; extern int LineStyle = 2; extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot"; double LineSpaceOld; double Hoch; double Tief; bool FirstRun = true; double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent) string LineText = "RoundNr "; string LineText1 = "RoundNr1 "; string LineText2 = "RoundNr2 "; int deinit() { double AbSpace = 0.01*LineSpace; double Oben = MathRound(110*Hoch)/100; double Unten = MathRound(80*Tief)/100; for(double i=0; i<=Oben; i+=AbSpace) { if(i<Unten) { continue; } ObjectDelete(LineText+DoubleToStr(i,2)); ObjectDelete(LineText1+DoubleToStr(i,2)); ObjectDelete(LineText2+DoubleToStr(i,2)); } return(0); } int start() { if(FirstRun) { Hoch = NormalizeDouble( High, 2 ); Tief = NormalizeDouble( Low, 2 ); FirstRun = false; } else if(LineSpace != LineSpaceOld) { deinit(); Hoch = NormalizeDouble( High, 2 ); Tief = NormalizeDouble( Low, 2 ); } DrawLines(); LineSpaceOld = LineSpace; return(0); } void DrawLines() { double AbSpace = 0.01*LineSpace; double Oben = MathRound(110*Hoch)/100; double Unten = MathRound(80*Tief)/100; for(double i=0; i<=Oben; i+=AbSpace) { if(i<Unten) { continue; } string StringNr = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow { ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i); ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle); ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor); } else // Adjustments { ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i); ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle); ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor); } //####################################################################### if(i<Unten) { continue; } string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow { ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000)); ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle); ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor); } else // Adjustments { ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000)); ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle); ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor); } //####################################################################### if(i<Unten) { continue; } string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow { ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000)); ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle); ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor); } else // Adjustments { ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000)); ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle); ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor); } } WindowRedraw(); } Georgebaker, 你为什么不使用一些像这样的指标:https://www.mql5.com/en/forum/180648/page307 作为你的指标的基础?它可能会为你节省一些编码时间 1...188189190191192193194195196197198199200201202...786 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
спасибо за ответ.
采矿业,H1,M30,M15,M5,M1
по-прежнему работает только один цвет, красный.
这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项
这里有一个使用单栏的版本。如果你希望有第三种颜色,你需要添加一个新的选项
在2分钟的仁科实时图表上,它的顶部只有2根绿色的柱子,这就是我累了的所有货币对的情况,这正常吗?
在2分钟的renko实时图表上,顶部只有2个绿色的柱子,这就是我累了的所有货币对的情况,这正常吗?
我不使用renko图表
它使用的是内置指标(iBEarsPower()和iBullsPower()),所以如果它出现了一些问题,那么问题就出在内置指标本身。
这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项
谈到这个问题,我想说的是:"我想说的是:"我想说的是:"我想说的是:Спасибо!!!
mladen。
我研究了第1874号帖子中的 "简单的MTF",并进行了操作。
注意:它是一个MA的MA,而且是MTF能力。
我有一些问题。
无论我对代码做什么,我都无法理解'returnBars'的作用,如果有的话。
1.是什么决定了目标时间框架内的变化条数是否是必需的,为什么?
2.关于这一行。
returnBars = TimeFrame == "returnBars"; // 检查是否需要改变的条数。
我不是一个高学历的程序员。 我不知道这种复合结构。我也不知道混合变量类型的规则。
看起来,字符串变量Timeframe正在获取布尔值returnBars的值。
然后再把这个值赋给returnBars--再一次。??
由于returnBars是布尔值,如果TimeFrame大于0,则赋值为'1',否则赋值为'0' ?
3.我将指标设置为更高的TF,并现场(向前)测试许多条,或在策略测试器中 测试。 我可以消除使用它的那条线,并且在指标线上没有变化。
if (returnBars) Comment("returnBars",returnBars, " Tick ",Volume(0))。
// 如果(returnBars) { ma1[0] = limit+1; return(0); }
屏幕上的注释行将显示 "returnBars 1"。
我不知道它从哪里得到'1'的值。
没有 "如果 "部分,它总是显示 "0"。
如果放在Init()中,结果也一样。
大的是
毫升登。
我研究了第1874号帖子中的 "简单的MTF",并进行了操作。
注意:它是一个MA的MA,而且是MTF能力。
我有一些问题。
无论我对代码做什么,我都无法理解'returnBars'的作用,如果有的话。
1.是什么决定了目标时间框架内的变化条数是否是必需的,为什么?
2.关于这一行。
returnBars = TimeFrame == "returnBars"; // 检查是否需要改变的条数。
我不是一个高学历的程序员。我不知道这种复合结构。我也不知道混合变量类型的规则。
看起来,字符串变量Timeframe正在获取布尔值returnBars的值。
然后再把这个值赋给returnBars--再一次。??
由于returnBars是布尔值,如果TimeFrame大于0,则赋值为'1',否则赋值为'0' ?
3.我将指标设置为更高的TF,并现场(向前)测试许多条,或在策略测试器中测试。我可以消除使用它的那条线,并且在指标线上没有变化。
if (returnBars) Comment("returnBars",returnBars, " Tick ",Volume(0))。
// 如果(returnBars) { ma1[0] = limit+1; return(0); }
屏幕上的注释行将显示 "returnBars 1"。
我不知道它从哪里得到'1'的值。
没有 "如果 "部分,它总是显示 "0"。
如果放在Init()中,结果也一样。
大贝大的是
想象一下:
1.你在一个15分钟的图表上工作,你的指标显示的是1小时的数据。在15分钟图上,最后一个刻度有多少条变化,在1小时图上有多少条变化?返回条形图就是检查 这个。这个数字不一定是任何假设值(选择一个你很久没有从图表中访问的时间框架,看看当metatrader开始下载该时间框架的数据时会发生什么--你必须检查有多少新条形被下载,否则你将不得不在时间框架中来回跳跃,以便对一个多时间框架指标的过去条形有一个准确的状态)。
2.of returnBars = TimeFrame == "returnBars"。
你有一个赋值("=")和一个逻辑比较("=="),这意味着returnBars应该接收两个字符串(TimeFrame和 "returnBars")的逻辑比较结果。
3.return bars是一个布尔类型的变量。它可以有两个值:0等于 "假",1等于 "真"。这就是为什么你在returnBars中得到1(意味着returnBars被设置为 "真")。
______________
PS:如果是C/C++的布尔规则,那么任何不同于0的值都会被认为是真,你可以用同样的方式测试metatrader变量(例如if(someDoubleValue)将测试someDoubleValue是否不同于0),但是metatrader将0和1分配给布尔型变量
亲爱的Mladen
我不明白Poalln指标是如何重绘的。我知道iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8)或iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8)意味着未来的数值,但是在计算最后一栏时,没有i-8的数据。
我认为它应该是零。那么,Pollan是如何重绘的呢?
最好。
亲爱的Mladen
我不明白Poalln指标是如何重绘的。我知道iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8)或iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8)意味着未来的数值,但是当计算最后一栏时,没有i-8的数据。
我认为它应该是零。那么,Pollan是如何重绘的呢?
最好的。IXI
在当前条形图中,它得到的是这些条形图的数值为0。在第一个过去的条形图上,它得到1个未来值和7个零。以此类推。
随着新条形图的形成,原来得到零的未来值结果的条形图实际上得到了真正的未来结果,然后这些值根据这些 "新 "的未来值被改变。
我怎样才能让这个指标在日元对上工作?
你好。
这个指标在每个整数上 都有一条线,在整数的两侧各有一条15点的线。
但它在日元对上不起作用。
为了使其发挥作用,需要做哪些改变?
extern color UpperLineColor = Red;
extern color MainLineColor = Red;
extern color LowerLineColor = Red;
extern double HighOffset = 150;
extern double LowOffset = 150;
extern int LineStyle = 2;
extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";
double LineSpaceOld;
double Hoch;
double Tief;
bool FirstRun = true;
double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)
string LineText = "RoundNr ";
string LineText1 = "RoundNr1 ";
string LineText2 = "RoundNr2 ";
int deinit()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
ObjectDelete(LineText+DoubleToStr(i,2));
ObjectDelete(LineText1+DoubleToStr(i,2));
ObjectDelete(LineText2+DoubleToStr(i,2));
}
return(0);
}
int start()
{
if(FirstRun)
{
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
FirstRun = false;
}
else if(LineSpace != LineSpaceOld)
{
deinit();
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
}
DrawLines();
LineSpaceOld = LineSpace;
return(0);
}
void DrawLines()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
string StringNr = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
else // Adjustments
{
ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
else // Adjustments
{
ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
else // Adjustments
{
ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
}
WindowRedraw();
}你好。
这种方法在每个整数上都有一条线,在整数的两侧各有一条15点的线。
但它对日元对不起作用。
为了使其发挥作用,需要做哪些改变?
extern color UpperLineColor = Red;
extern color MainLineColor = Red;
extern color LowerLineColor = Red;
extern double HighOffset = 150;
extern double LowOffset = 150;
extern int LineStyle = 2;
extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";
double LineSpaceOld;
double Hoch;
double Tief;
bool FirstRun = true;
double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)
string LineText = "RoundNr ";
string LineText1 = "RoundNr1 ";
string LineText2 = "RoundNr2 ";
int deinit()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
ObjectDelete(LineText+DoubleToStr(i,2));
ObjectDelete(LineText1+DoubleToStr(i,2));
ObjectDelete(LineText2+DoubleToStr(i,2));
}
return(0);
}
int start()
{
if(FirstRun)
{
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
FirstRun = false;
}
else if(LineSpace != LineSpaceOld)
{
deinit();
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
}
DrawLines();
LineSpaceOld = LineSpace;
return(0);
}
void DrawLines()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
string StringNr = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
else // Adjustments
{
ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
else // Adjustments
{
ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
else // Adjustments
{
ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
}
WindowRedraw();
}Georgebaker,
你为什么不使用一些像这样的指标:https://www.mql5.com/en/forum/180648/page307 作为你的指标的基础?它可能会为你节省一些编码时间