[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 81

 

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3;
double SL,TP;
int init() {
return(0);
}
int start()
{
if (BUY)
{
if (takeprofit!=0) TP =NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss! =0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;

BUY=false;
}

return(0);
}
void OPENORDER(string ord)
{
int error;
while (true)
{ error=true;
if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slipage,SL,TP," ,Magic,0){BUY = false;}。
}
return;
}

 
nemo811:

请给我一个例子。我只是在学习,还没有面对设置旗帜的任务。)
只要把这个变量改为false就可以了,在下一次勾选时,EA将不会进入这个区块,也不会再打开其他东西,直到重新启动。
 
nemo811:

请告知如何在EA中允许单次执行一个条件(如开立一个订单),而不是每次都重复执行。在这种情况下,当关闭一个头寸时,EA不应该打开一个新的头寸。我已经尝试过了,但没有达到预期效果。

提前感谢。



为什么你命名的变量中的订单票将被保存的错误?

if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slipage,SL,TP,"", Magic,0){BUY = false;}。

阅读OrderSend(),我想问题会自己消失,我会这样写。

void OPENORDER(string ord)
{
int ticket = -1;
 while (ticket<0)
 {ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
  sleep(500);
}
return;
}
 
IgorM:



也许你在前面读到了我说出了我的问题。他们似乎已经找到了解决方案,但我在书中找不到如何在mql中处理字符串(

如何从一行一行的数字中抽出?

 
NameLess:


也许你在前面读到了我说出了我的问题。他们似乎已经找到了解决方案,但我在书中找不到如何在mql中处理字符串(

如何从一行一行的数字中抽出?


创建一个脚本来试验MQL4的字符串函数--见这里https://docs.mql4.com/ru/strings
 

例如,根据什么规则?

 
drknn:

创建一个试验MQL4字符串函数的脚本--见这里https://docs.mql4.com/ru/strings/StringSubstr

谢谢你!
 
NameLess:


也许你在前面读到了我提出的问题。这似乎是一个解决方案,但我在书中找不到在mql中处理字符串的方法(

如何从一串数字中取出一个数字?

将一个数字转换成一个字符串https://docs.mql4.com/ru/convert/DoubleToStr

切断字符串的一部分https://docs.mql4.com/ru/strings/StringSubstr,从头开始https://docs.mql4.com/ru/strings/StringLen

并将其转换为真正的类型https://docs.mql4.com/ru/convert/StrToDouble

这就是你需要对字符串做的所有事情,也许StrToDouble()对你来说已经足够了。

但这种 "丑陋的方法 "会切断数字,而不是四舍五入。 另一种方法:将一个实数乘以10的幂,并将结果赋予int类型--如果我没有弄错,不会有四舍五入,然后用int除以10的幂。

 
IgorM:

将一个数字翻译成字符串https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/strings/StringLen 的开头切下一部分字符串https://docs.mql4.com/ru/strings/StringSubstr

并将所有的东西都转换回一个真正的类型https://docs.mql4.com/ru/convert/StrToDouble

这就是你需要对字符串做的所有事情,也许StrToDouble()对你来说已经足够了。

但这种 "丑陋的方法 "会切断数字,而不是四舍五入。 另一种方法:将一个实数乘以10到x的幂,并将结果交给int类型--如果我没有弄错,不会有四舍五入,然后用int除以10到x的幂


至少*切掉*,因为数字只能从指标中取出来,变成一个字符串......谢谢你的建议,我将进行实验)
 

IgorM:

无名氏

谢谢你的帮助。我理解设置标志的逻辑和返回订单数量 的功能。但我也对订单关闭的时刻感兴趣。看起来标志条件试图再次下单,但返回订单号的函数说少了1个订单,并且还初始化了一个仓位。如果我错过了什么,请纠正我。