新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 22

 
Artyom Trishkin:

О!谢谢。(笑)。早上自己没有意识到......不过还是需要对填充数组进行检查。在Quatermass没有见面,而在Five中,由于缺乏历史数据,往往不能在第一时间填写数据。

ZS.你应该多睡觉--你的思想会朝这个方向努力。

嗯,你可以把它放在一个循环中

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

甚至是

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

准确复制所要求的金额。


ps;当我去倒茶的时候,我有另一个想法,使用CopyRates()和一个结构MqlRates rates[] 的数组,但我太懒了,无法重写一些东西。

 
Alexey Viktorov:

那么,你也可以把它放在一个循环中

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

甚至是

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

准确地复制所要求的副本数量。


ps;当我喝茶的时候,我有了另一个想法--使用CopyRates()和结构数组MqlRates rates[],但我太懒了,无法重写。

这不就是我提议的方式吗?
 
giannis1386:
帮助我检查其他出售条件。
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

它有一个奇怪的逻辑。但是,即使你不去看那些奇怪的逻辑,那么。

在这里,你有两个条件 是买入,其余的都 是卖出。

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

你的逻辑很奇怪。但是,即使你不去看那些奇怪的逻辑,那么。

在这里,你有两个条件 被检查为买入,其余的都是 卖出。

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

我试着把slevel=OrderStopLoss()>Ask+Point*TS 作为卖点

但由于我对编程一窍不通,所以没有任何有用的东西出来。 我在论坛上摸索了一个星期。

为什么有这么奇怪的逻辑?)这段代码不完全是我的。

 
giannis1386:

我试着加入slevel=OrderStopLoss()>Ask+Point*TS

我在论坛上摸索了一个星期。 我所有的尝试都以卖出止损点与价格一起移动而告终。

为什么会有这么奇怪的逻辑?)这些代码并不全是我的。 我尽我所能地重做了它。

你为什么不先写出卖出和买入止损点应该转移的条件?

然后,在你思考过后,在你的代码中写下单据上的内容。

 
Artyom Trishkin:

首先,用铅笔在一张纸上写下你需要转移停止购买和停止出售的条件。

然后,在你思考过后,把写在纸片上的内容写在代码里。

slevel=OrderStopLoss()>Ask+Point*TS;这就是卖出头寸的样子。
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; 好吧,似乎是正确的。 或者是错误的? 我是新手

你甚至明白在这种情况下写的是什么吗?这是对一个双数类型 的变量进行0或1的赋值。

你想得到什么?

 
Artyom Trishkin:

你甚至明白在这种情况下写的是什么吗?它是对一个双数类型 的变量进行0或1的赋值。

你想达到什么目的?

这是我校对的内容。

检查条件--不要来回移动SL,而只能朝一个方向移动。

例如,对于一个购买的订单,你的公式是

订单止损()<买入点*拖曳止损

利用这个例子,我已经为塞尔做了。

 
giannis1386:

这是我读到的内容。

检查条件--不能来回移动SL,而只能朝一个方向移动

例如,对于一个购买的订单,你的公式是

订单止损()<买入点*拖曳止损

使用这个例子,我把它粘贴在卖出位置上。

所以你需要这样。

在俄罗斯...如果止损单小于买入价减去尾随止损距离,那么...你的行动

然后你把这个逻辑表达式 的结果分配给变量--即要么是零,要么是一。

 
Artyom Trishkin:

所以你需要这个。

在俄罗斯...如果止损单小于买入价减去尾随止损距离,那么...你的行动

然后你把这个布尔表达式 的结果分配给变量--即要么是0,要么是1。

我完全糊涂了。

double blevel=OrderStopLoss()<Bid-Point*TS; 对我有用SL只追求价格上的利润。

double slevel=OrderStopLoss()>Ask+Point*TS; 我不知道怎么把这个加到else中去

它们不是bool。

原因: