如何编码? - 页 312 1...305306307308309310311312313314315316317318319...347 新评论 Mladen Rakic 2012.08.18 08:43 #3111 ... 你的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 "会上升和下降.... 谢谢你的帮助。 [删除] 2012.08.18 22:53 #3112 编码新手 mladen: 你的LastProfitHigh是如何声明的? 如果它被声明在函数的主体内(例如start()),如果你不把它声明为静态的,它就会一直改变值。因此,如果它被声明为局部(在函数内),请尝试在全局范围内声明它,或将它声明为静态变量,这样它将在两个刻度之间 "继承 "数值。 你好,mladen。 我现在已经把变量移到start()函数之外,并声明它为 "静态double",谢谢你的回答,希望它能正确显示。 代码的逻辑表述是否正确? Mladen Rakic 2012.08.19 14:17 #3113 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",感谢你的回答,希望它能正确显示。 这段代码的逻辑表述是否正确? How to code? closed orders in history Requests & Ideas [删除] 2012.08.20 05:51 #3114 如何编码? 效果很好,再次感谢你的出色帮助。 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(); } Abdalla Doleh 2012.08.20 15:12 #3115 很完美!谢谢。 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)); } [删除] 2012.08.21 08:06 #3116 如何编码? 你好,Pip。 谢谢你的代码片段,人们可以分享想法和编码风格的方式非常好,随着我知识的增长,我可以从你和mladen这样的人身上吸取经验。 Pip: 很完美!谢谢。 dasio 2012.08.24 17:19 #3117 嗨。 我有个请求。 如果我想用ObjectDelete命令删除所有名称中包含 "example "这个词的对象,我应该怎么写代码? 对于例子 对象名称 "Example13241" "Example453623" 我想删除所有包含 "example "这个词的对象。 非常感谢您 Mladen Rakic 2012.08.24 17:41 #3118 ... 使用类似这样的方法(这将删除所有名称以 "示例 "开头的对象)。 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 "这个词的对象。 非常感谢您 dasio 2012.08.24 23:01 #3119 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部分为另一种颜色。 这可能吗? 谢谢你^^。 Mladen Rakic 2012.08.25 03:34 #3120 .. 简而言之,如果你指的是对象,答案是否定的。你必须为之创建3个对象 如果你使用缓冲区,那么你将需要5个绘图缓冲区 来处理一条3色的非重绘线,由于只有8个绘图缓冲区,这就大大限制了你的工作。 dasio: 谢谢你,这很完美。我还有一个问题^^。 我在图表中创建了一段具有声明长度的趋势线。我可以设置颜色,这很正常。我想知道是否有可能在同一条趋势线上设置多个颜色。 例如,前1/3部分为一种颜色,2/3部分为另一种颜色,3/3部分为另一种颜色。 这有可能吗? 谢谢你^^。 1...305306307308309310311312313314315316317318319...347 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
你的LastProfitHigh是如何声明的?
如果它是在函数 主体中声明的(例如start()),如果你不把它声明为静态变量,它将总是改变数值。因此,如果它被声明为局部(在函数内),请尝试在全局范围内声明它,或作为静态变量,这样它就会在两个刻度之间 "继承 "数值。
大家好。
我是编码新手,一直在慢慢学习语言和语法,但遇到了一个关于MT4如何更新变量的问题。
我试图编写一个简单的EA,显示当前开仓交易的最高利润,并且只有在达到新的高点时才会更新,但现在的情况是,金额随着利润的变化而上下波动,我似乎看不到我在代码逻辑上的错误。
我检查以确保选定的交易仍在进行中
t_CloseTime=OrderCloseTime(); //如果订单没有关闭则返回0
if(t_CloseTime==0) //订单已关闭,如果不是零。
{
if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();
如果(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;
}//endif
那么,如果逻辑是正确的,为什么这个变量 "LastProfitHigh "会上升和下降....
谢谢你的帮助。编码新手
你的LastProfitHigh是如何声明的? 如果它被声明在函数的主体内(例如start()),如果你不把它声明为静态的,它就会一直改变值。因此,如果它被声明为局部(在函数内),请尝试在全局范围内声明它,或将它声明为静态变量,这样它将在两个刻度之间 "继承 "数值。
你好,mladen。
我现在已经把变量移到start()函数之外,并声明它为 "静态double",谢谢你的回答,希望它能正确显示。
代码的逻辑表述是否正确?
aud4xtrader
这个逻辑是正确的
如果你把变量移到开始之外,那么你不需要声明它是静态的(当它在任何函数 体之外时,它自动成为一个全局变量--并且它在整个代码中是 "可见的")如果你想让变量保持在某个函数的本地,并且仍然保持它以前的状态(例如,在以前的tick上的状态),那么你要声明它是静态的
这里有两个例子,最终的结果是一样的
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。
我现在已经把这个变量移到start()函数之外,并声明它为 "静态double",感谢你的回答,希望它能正确显示。
这段代码的逻辑表述是否正确?如何编码?
效果很好,再次感谢你的出色帮助。
aud4xtrader
逻辑上是可以的
如果你把变量移到开始之外,那么你不需要声明它是静态的(当它在任何函数体之外时,它自动成为一个全局变量--并且它在整个代码中是 "可见的")如果你想让变量保持在某个函数的本地,并且仍然保持它以前的状态(例如,在以前的tick上的状态),那么你要声明它是静态的
这里有两个例子,最终的结果是一样的
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();
}
很完美!谢谢。
试试这两个函数 。
如果价格相等,或者与当前开仓的一些订单的价格距离在指定的距离之内,这两个函数都返回真。
{
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这样的人身上吸取经验。
很完美!谢谢。
嗨。
我有个请求。
如果我想用ObjectDelete命令删除所有名称中包含 "example "这个词的对象,我应该怎么写代码?
对于例子
对象名称
"Example13241"
"Example453623"
我想删除所有包含 "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);
}
你好。
我有个请求。
如果我想用ObjectDelete命令删除所有名称中包含 "example "这个词的对象,我必须怎么写代码?
对于例子
对象名称
"Example13241"
"Example453623"
我想删除所有包含 "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个绘图缓冲区,这就大大限制了你的工作。
谢谢你,这很完美。
我还有一个问题^^。
我在图表中创建了一段具有声明长度的趋势线。我可以设置颜色,这很正常。我想知道是否有可能在同一条趋势线上设置多个颜色。
例如,前1/3部分为一种颜色,2/3部分为另一种颜色,3/3部分为另一种颜色。
这有可能吗?
谢谢你^^。