初学者的问题 MQL4 MT4 MetaTrader 4 - 页 19 1...121314151617181920212223242526...261 新评论 Artyom Trishkin 2016.12.02 11:11 #181 Vitalie Postolache: 不要像这样)))) 原因不是mql4 Yaroslav Nykula 2016.12.02 12:32 #182 Vitalie Postolache:这不是它的工作方式。这个函数的参数是:1)要搜索的字符串;2)要找到的字符组合;3)搜索的起点(默认情况下,根据第1点从字符串的空字符开始)。它返回所寻找的子串在字符串中开始的位置数,如果没有找到子串,则返回-1。因此,应该这样写。if(StringFind(OrderComment(),"[tp]",0)>-1) {действие при нахождении признака закрытия по TP}谢谢你的回答...因此,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中被写成一行, 内容是 与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码 如果(StringFind(OrderComment(),"[tp]",0)>-1){double OrderTakeProfit()。如果(OrderSelect(12, SELECT_BY_POS)==true)Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。否则Print("OrderSelect()返回错误",GetLastError())。bool PlaySound(string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。);}...这段代码能在MQL4中工作吗? ... Questions from Beginners MQL4 编码帮助 [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 A1exPit 2016.12.02 12:45 #183 bablusut:谢谢你的答复...事实证明,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中只用一行就写好了 ,即 与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码 如果(StringFind(OrderComment(),"[tp]",0)>-1){double OrderTakeProfit()。如果(OrderSelect(12, SELECT_BY_POS)==true)Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。否则Print("OrderSelect()返回错误",GetLastError())。bool PlaySound(string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。);}...这段代码能在MQL4中工作吗? ...double OrderTakeProfit(); - 该代码在编译时应该有一个错误。 就我的理解(我自己还在研究),OrderTakeProfit();要求从市场上获得订单利润。因此,我们的专家顾问对这几行提出了2个请求OrderTakeProfit(); 看起来这一行应该被删除 (double OrderTakeProfit(); ) Vitalie Postolache 2016.12.02 12:58 #184 bablusut:谢谢你的答复...事实证明,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中只用一行就写好了 ,即 与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码 如果(StringFind(OrderComment(),"[tp]",0)>-1){double OrderTakeProfit()。如果(OrderSelect(12, SELECT_BY_POS)==true)Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。否则Print("OrderSelect()返回错误",GetLastError())。bool PlaySound(string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。);}...这段代码能在MQL4中工作吗? ...这一点已经提到:双倍OrderTakeProfit()- 不要这样做。这个函数是自动声明的,不得重新宣布。 编译器将产生一个错误,因为标准函数不需要预先宣布。if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前,订单必须已经在最开始被选中,循环计数器必须作为订单号的参数,而不是一个常数,否则每次迭代都会检查第12个订单。 Yaroslav Nykula 2016.12.02 13:09 #185 Vitalie Postolache:他们已经说过了:双倍OrderTakeProfit()- 不要那样做。这个函数是自动声明的,不能重复声明。 编译器会产生一个错误,因为标准函数不需要事先声明。if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。订单必须在最开始就已经被选中,在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前。A1exPit。double OrderTakeProfit(); - 编译时应该在这里崩溃。 根据我的理解(我自己也是这样理解的),OrderTakeProfit();向市场提出订单的盈利要求。因此,我们的专家顾问对这几行提出了2个请求OrderTakeProfit(); 看起来这一行应该被删除 (double OrderTakeProfit(); ) 谢谢你的评论--事实证明你是对的。 Yaroslav Nykula 2016.12.02 13:53 #186 "Vitalie Postolache:他们已经说过了:双倍OrderTakeProfit()- 你不应该这么做。这个函数是自动声明的,不能重复声明。 编译器会产生一个错误,因为标准函数不需要事先声明。if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。顺序必须在一开始就被选中,在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前,我们应该将循环计数器设置为顺序号的参数,而不是一个常数,否则我们每次迭代都会看到第12个顺序。谢谢你的答复...函数double OrderTakeProfit() 的声明是可以理解的,让我们删除它。"如果我们在前面的代码中只有一个循环计数器,在OrdersHistoryTotal函数中, 以 (i=0;i<accTotal;i++) 为主体的循环运算符必须被用作订单号的参数, 这意味着我们应该用OrderSelect 函数的主体 来替换运算符的主体, 我们将得到如果(StringFind(OrderComment(),"[tp]",0)>-1){如果(OrderSelect(i=0;i<accTotal;i++)==true)Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。否则Print("OrderSelect()返回错误",GetLastError())。bool PlaySound(string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。);}...这段代码能在MQL4中工作吗? ... Vitalie Postolache 2016.12.02 14:00 #187 bablusut:谢谢你的答复...函数double OrderTakeProfit() 的声明很清楚,让我们删除它。"循环计数器应作为订单号的参数"--在前面的代码中,我们只有一个循环计数器,即OrdersHistoryTotal函数中的 循环操作符 , 其主体为(i=0;i<accTotal;i++), 这意味着我们应该用OrderSelect 函数的主体 替换操作符的主体, 就可以得到。再一次。在与订单有关的工作中,第一位 的必须是OrderSelect。然后是其他一切。如果我们围绕订单进行循环工作,操作顺序如下1.检查 if(OrderSelect())2.检查它是否是正确的订单,我们通常检查符号和魔法号码,然后检查类型if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) - 在这种情况下,只有为当前符号和指定魔法号码的市场订单被处理其他数据的处理,如OrderComment()、OrderProfit()等。它看起来会是这样的 for(int i=OrdersHistoryTotal()-1; i>=0; i--) //перебираем историю торгов { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //если ордер выбран то работаем дальше, иначе смысла нет { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) //Если ордер тот, что нам нужен (эту проверку можно и опустить, если нужно обработать все ордера в истории) { if(StringFind(OrderComment(),"[tp]",0)>-1) //если найден признак закрытия профитом Print("Order #",OrderTicket()," profit: ", OrderTakeProfit()); if(StringFind(OrderComment(),"[sl]",0)>-1) //если найден признак закрытия стоплосс Print("Order #",OrderTicket()," loss: ", OrderTakeProfit()); } } } Questions from Beginners MQL4 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 Any questions from newcomers atik441 2016.12.02 14:01 #188 如何检查iCustom指标的 一个或另一个缓冲区中是否有信号值? Renat Akhtyamov 2016.12.02 14:03 #189 Vitalie Postolache: 再一次。在处理一个订单时,OrderSelect应该放在首位 。然后是其他一切。他们显然是通过试验和错误来决定的,但这很昂贵,我自己也经历过......说实话,我的耳朵在嗡嗡作响...... Renat Akhtyamov 2016.12.02 14:04 #190 atik441: 如何检查iCustom指标 缓冲区中是否有信号值? 按照链接,它在你的帖子中被强调。 1...121314151617181920212223242526...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不要像这样))))
这不是它的工作方式。这个函数的参数是:1)要搜索的字符串;2)要找到的字符组合;3)搜索的起点(默认情况下,根据第1点从字符串的空字符开始)。
它返回所寻找的子串在字符串中开始的位置数,如果没有找到子串,则返回-1。
因此,应该这样写。
谢谢你的回答...因此,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中被写成一行, 内容是
与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码
如果(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit()。
如果(OrderSelect(12, SELECT_BY_POS)==true)
Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。
否则
Print("OrderSelect()返回错误",GetLastError())。
bool PlaySound(
string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。
);
}
...这段代码能在MQL4中工作吗? ...
谢谢你的答复...事实证明,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中只用一行就写好了 ,即
与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码
如果(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit()。
如果(OrderSelect(12, SELECT_BY_POS)==true)
Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。
否则
Print("OrderSelect()返回错误",GetLastError())。
bool PlaySound(
string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。
);
}
...这段代码能在MQL4中工作吗? ...
double OrderTakeProfit(); - 该代码在编译时应该有一个错误。
就我的理解(我自己还在研究),OrderTakeProfit();要求从市场上获得订单利润。因此,我们的专家顾问对这几行提出了2个请求OrderTakeProfit(); 看起来这一行应该被删除 (double OrderTakeProfit(); )
谢谢你的答复...事实证明,StringFind 函数及其参数( string_value, string match_substring, int start_pos=0 )在普通代码中只用一行就写好了 ,即
与函数参数数据相对应的参数: string OrderComment(), string "[tp]", int 0 ,如果这个表达式( 用 大括号 括起来)大于-1 ,则执行以下 {括号内}代码
如果(StringFind(OrderComment(),"[tp]",0)>-1)
{
double OrderTakeProfit()。
如果(OrderSelect(12, SELECT_BY_POS)==true)
Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。
否则
Print("OrderSelect()返回错误",GetLastError())。
bool PlaySound(
string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。
);
}
...这段代码能在MQL4中工作吗? ...
这一点已经提到:双倍OrderTakeProfit()- 不要这样做。这个函数是自动声明的,不得重新宣布。 编译器将产生一个错误,因为标准函数不需要预先宣布。
if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前,订单必须已经在最开始被选中,循环计数器必须作为订单号的参数,而不是一个常数,否则每次迭代都会检查第12个订单。
他们已经说过了:双倍OrderTakeProfit()- 不要那样做。这个函数是自动声明的,不能重复声明。 编译器会产生一个错误,因为标准函数不需要事先声明。
if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。订单必须在最开始就已经被选中,在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前。
double OrderTakeProfit(); - 编译时应该在这里崩溃。
根据我的理解(我自己也是这样理解的),OrderTakeProfit();向市场提出订单的盈利要求。因此,我们的专家顾问对这几行提出了2个请求OrderTakeProfit(); 看起来这一行应该被删除 (double OrderTakeProfit(); )
他们已经说过了:双倍OrderTakeProfit()- 你不应该这么做。这个函数是自动声明的,不能重复声明。 编译器会产生一个错误,因为标准函数不需要事先声明。
if(OrderSelect(12, SELECT_BY_POS)==true)- 如果我们这样做,那么,充其量,这将是另一个订单,而不是上面已经处理过的评论的订单。顺序必须在一开始就被选中,在if(StringFind(OrderComment(),"[tp]",0)>-1) 之前,我们应该将循环计数器设置为顺序号的参数,而不是一个常数,否则我们每次迭代都会看到第12个顺序。
谢谢你的答复...函数double OrderTakeProfit() 的声明是可以理解的,让我们删除它。
"如果我们在前面的代码中只有一个循环计数器,在OrdersHistoryTotal函数中, 以 (i=0;i<accTotal;i++) 为主体的循环运算符必须被用作订单号的参数, 这意味着我们应该用OrderSelect 函数的主体 来替换运算符的主体, 我们将得到
如果(StringFind(OrderComment(),"[tp]",0)>-1)
{
如果(OrderSelect(i=0;i<accTotal;i++)==true)
Print("Order #",OrderTicket()," profit: " , OrderTakeProfit())。
否则
Print("OrderSelect()返回错误",GetLastError())。
bool PlaySound(
string payment // 其中"payment " 是MT4 Sound文件夹中的文件名。
);
}
...这段代码能在MQL4中工作吗? ...
谢谢你的答复...函数double OrderTakeProfit() 的声明很清楚,让我们删除它。
"循环计数器应作为订单号的参数"--在前面的代码中,我们只有一个循环计数器,即OrdersHistoryTotal函数中的 循环操作符 , 其主体为(i=0;i<accTotal;i++), 这意味着我们应该用OrderSelect 函数的主体 替换操作符的主体, 就可以得到。
再一次。在与订单有关的工作中,第一位 的必须是OrderSelect。然后是其他一切。
如果我们围绕订单进行循环工作,操作顺序如下
1.检查 if(OrderSelect())
2.检查它是否是正确的订单,我们通常检查符号和魔法号码,然后检查类型if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) - 在这种情况下,只有为当前符号和指定魔法号码的市场订单被处理
其他数据的处理,如OrderComment()、OrderProfit()等。
它看起来会是这样的
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //если ордер выбран то работаем дальше, иначе смысла нет
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) //Если ордер тот, что нам нужен (эту проверку можно и опустить, если нужно обработать все ордера в истории)
{
if(StringFind(OrderComment(),"[tp]",0)>-1) //если найден признак закрытия профитом
Print("Order #",OrderTicket()," profit: ", OrderTakeProfit());
if(StringFind(OrderComment(),"[sl]",0)>-1) //если найден признак закрытия стоплосс
Print("Order #",OrderTicket()," loss: ", OrderTakeProfit());
}
}
}
再一次。在处理一个订单时,OrderSelect应该放在首位 。然后是其他一切。
他们显然是通过试验和错误来决定的,但这很昂贵,我自己也经历过......
说实话,我的耳朵在嗡嗡作响......
如何检查iCustom指标 缓冲区中是否有信号值?