如何编码? - 页 312

 

...

你的LastProfitHigh是如何声明的?

如果它是在函数 主体中声明的(例如start()),如果你不把它声明为静态变量,它将总是改变数值。因此,如果它被声明为局部(在函数内),请尝试在全局范围内声明它,或作为静态变量,这样它就会在两个刻度之间 "继承 "数值。

aud4xtrader:
大家好。

我是编码新手,一直在慢慢学习语言和语法,但遇到了一个关于MT4如何更新变量的问题。

我试图编写一个简单的EA,显示当前开仓交易的最高利润,并且只有在达到新的高点时才会更新,但现在的情况是,金额随着利润的变化而上下波动,我似乎看不到我在代码逻辑上的错误。

我检查以确保选定的交易仍在进行中

t_CloseTime=OrderCloseTime(); //如果订单没有关闭则返回0

if(t_CloseTime==0) //订单已关闭,如果不是零。

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

如果(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

那么,如果逻辑是正确的,为什么这个变量 "LastProfitHigh "会上升和下降....

谢谢你的帮助。
 

编码新手

mladen:
你的LastProfitHigh是如何声明的? 如果它被声明在函数的主体内(例如start()),如果你不把它声明为静态的,它就会一直改变值。因此,如果它被声明为局部(在函数内),请尝试在全局范围内声明它,或将它声明为静态变量,这样它将在两个刻度之间 "继承 "数值。

你好,mladen。

我现在已经把变量移到start()函数之外,并声明它为 "静态double",谢谢你的回答,希望它能正确显示。

代码的逻辑表述是否正确?

 

aud4xtrader

这个逻辑是正确的

如果你把变量移到开始之外,那么你不需要声明它是静态的(当它在任何函数 体之外时,它自动成为一个全局变量--并且它在整个代码中是 "可见的")如果你想让变量保持在某个函数的本地,并且仍然保持它以前的状态(例如,在以前的tick上的状态),那么你要声明它是静态的

这里有两个例子,最终的结果是一样的

double previousProfit=0;

int start()

{

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

[/PHP]

or the same thing but with static variable

[PHP]

int start()

{

static double previousProfit=0;

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

aud4xtrader:
你好,mladen。

我现在已经把这个变量移到start()函数之外,并声明它为 "静态double",感谢你的回答,希望它能正确显示。

这段代码的逻辑表述是否正确?
 

如何编码?

效果很好,再次感谢你的出色帮助。

mladen:
aud4xtrader

逻辑上是可以的

如果你把变量移到开始之外,那么你不需要声明它是静态的(当它在任何函数体之外时,它自动成为一个全局变量--并且它在整个代码中是 "可见的")如果你想让变量保持在某个函数的本地,并且仍然保持它以前的状态(例如,在以前的tick上的状态),那么你要声明它是静态的

这里有两个例子,最终的结果是一样的

double previousProfit=0;

int start()

{

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

[/PHP]

or the same thing but with static variable

[PHP]

int start()

{

static double previousProfit=0;

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

 

很完美!谢谢。

mladen:
试试这两个函数
:第一个是找出是否有一个与开盘价完全相同的订单

;第二个是检查是否有一个与所需价格相差Nnn点的订单

如果价格相等,或者与当前开仓的一些订单的价格距离在指定的距离之内,这两个函数都返回真。

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

 

如何编码?

你好,Pip。

谢谢你的代码片段,人们可以分享想法和编码风格的方式非常好,随着我知识的增长,我可以从你和mladen这样的人身上吸取经验。

Pip:
很完美!谢谢。
 

嗨。

我有个请求。

如果我想用ObjectDelete命令删除所有名称中包含 "example "这个词的对象,我应该怎么写代码?

对于例子

对象名称

"Example13241"

"Example453623"

我想删除所有包含 "example "这个词的对象。

非常感谢您

 

...

使用类似这样的方法(这将删除所有名称以 "示例 "开头的对象)。

string lookFor = "Example";

int lookForLength = StringLen(lookFor);

for (int i=ObjectsTotal()-1; i>=0; i--)

{

string objectName = ObjectName(i);

if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);

}

dasio:
你好。

我有个请求。

如果我想用ObjectDelete命令删除所有名称中包含 "example "这个词的对象,我必须怎么写代码?

对于例子

对象名称

"Example13241"

"Example453623"

我想删除所有包含 "example "这个词的对象。

非常感谢您
 
mladen:
使用类似这样的方法(这将删除所有名称以 "示例 "开头的对象)。
string lookFor = "Example";

int lookForLength = StringLen(lookFor);

for (int i=ObjectsTotal()-1; i>=0; i--)

{

string objectName = ObjectName(i);

if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);

}

谢谢你,这很完美。

我还有一个问题^^。

我在图表中创建了一个趋势线段,并声明了长度。我可以设置颜色,这很正常。我想知道是否有可能在同一条趋势线上设置超过一种颜色。

例如,前1/3部分为一种颜色,2/3部分为另一种颜色,3/3部分为另一种颜色。

这可能吗?

谢谢你^^。

 

..

简而言之,如果你指的是对象,答案是否定的。你必须为之创建3个对象

如果你使用缓冲区,那么你将需要5个绘图缓冲区 来处理一条3色的非重绘线,由于只有8个绘图缓冲区,这就大大限制了你的工作。

dasio:
谢谢你,这很完美。

我还有一个问题^^。

我在图表中创建了一段具有声明长度的趋势线。我可以设置颜色,这很正常。我想知道是否有可能在同一条趋势线上设置多个颜色。

例如,前1/3部分为一种颜色,2/3部分为另一种颜色,3/3部分为另一种颜色。

这有可能吗?

谢谢你^^。