编码帮助 - 页 195

 
shtopr:
спасибо за ответ.

采矿业,H1,M30,M15,M5,M1

по-прежнему работает только один цвет, красный.

这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项

 
mladen:
这里有一个使用单栏的版本。如果你希望有第三种颜色,你需要添加一个新的选项

在2分钟的仁科实时图表上,它的顶部只有2根绿色的柱子,这就是我累了的所有货币对的情况,这正常吗?

 
drunkpips:
在2分钟的renko实时图表上,顶部只有2个绿色的柱子,这就是我累了的所有货币对的情况,这正常吗?

我不使用renko图表

它使用的是内置指标(iBEarsPower()和iBullsPower()),所以如果它出现了一些问题,那么问题就出在内置指标本身。

 
mladen:
这就是我告诉你的:对于第三种颜色(当两个值都落在同一数值范围内时),你需要修改代码,为第三种颜色添加一个选项

谈到这个问题,我想说的是:"我想说的是:"我想说的是:"我想说的是:Спасибо!!!

 

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()中,结果也一样。

大的是

 
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分配给布尔型变量

 

亲爱的Mladen

我不明白Poalln指标是如何重绘的。我知道iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8)或iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8)意味着未来的数值,但是在计算最后一栏时,没有i-8的数据。

我认为它应该是零。那么,Pollan是如何重绘的呢?

最好。

 
-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个零。以此类推。

随着新条形图的形成,原来得到零的未来值结果的条形图实际上得到了真正的未来结果,然后这些值根据这些 "新 "的未来值被改变。

 

我怎样才能让这个指标在日元对上工作?

你好。

这个指标在每个整数上 都有一条线,在整数的两侧各有一条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:
你好。

这种方法在每个整数上都有一条线,在整数的两侧各有一条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 作为你的指标的基础?它可能会为你节省一些编码时间