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

 
AlGuru 请告知。如何在专家顾问中指定在下一个蜡烛上关闭?
datetime Time[] - 阵列时间,包含当前图表中每个条形 开盘时间 Time[0] - 上一个条形图的开放 时间。如果OrderOpenTime()小于 Time[0] - 这意味着订单是在最后一个柱子上打开的,根据你的策略,现在是关闭这个订单的时候。
 
STARIJ:
datetime Time[] -时间数组,包含当前图表中每个条形图 打开时间 Time[0] - 最后一个条形图的开放 时间。 如果OrderOpenTime() 开盘时间小于 Time[0]- 这意味着订单是在最后一个柱子上打开的,根据你的策略,现在是关闭这个订单的时候。
或者,它已经被遗忘了,是一年前 打开的,例如;)
 
STARIJ:
datetime Time[] - 数组中的时间序列,包含了当前图表中每个条形 打开时间 Time[0] - 最后一个条形图的开放 时间。如果OrderOpenTime()小于Time[0] - 这意味着订单是在最后一个柱子上打开的,根据你的策略,现在是关闭这个订单的时候


谢谢你!刚刚用iTime功能 解决了这个问题。我还不擅长使用数组))。

 
AlGuru:


谢谢你!我刚刚用iTime功能解决了这个问题。我还不擅长使用数组))。

告诉我你是如何解决的。

只是有一点你可能没有考虑到。

关于交易、自动交易系统和交易策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

Artyom Trishkin, 2017.05.25 19:43

STARIJ:
datetime Time[] -时间数组,包含当前图表中每个条形图 打开时间 Time[0] - 上一个条形图的开放时间 如果OrderOpenTime()小于 Time[0]- 这意味着订单是在最后一栏打开的,根据你的策略,现在是关闭这个订单的时候。

比如说,要么已经被遗忘,一年前 就被发现了;)

 
Artyom Trishkin:

告诉我你是如何解决的。

只是有些事情你可能没有考虑到。



OrderOpenTime() < iTime(Symbol(), 0, 0)
 
AlGuru:

OrderOpenTime() < iTime(Symbol(), 0, 0)

而如果订单的开启时间 是一周前?那么它肯定不在最后一根蜡烛上(如果图表不是周线)。我们也应该关闭它吗?

当然,这完全取决于你的TS的要求,但我想走另一条路......

 
Artyom Trishkin:

而如果订单的开启时间 是一周前?那么它肯定不是在最后一根蜡烛上(如果图表不是周线)。我们也应该关闭它吗?

当然,这完全取决于你的TS的要求,但我想走另一条路。


这是一个额外的条件。当价格达到MA线时,应关闭头寸。有时,价格正好在这条线上开盘,在每一个刻度上开仓和平仓。我已经通过不早于下一个蜡烛的平仓来解决了这个问题。
 

大家好!

请告知如何在策略测试器中 对以下动作进行编码

一般想法

1.开单N -X(量=0.1)。

2.如果 这个 订单在SL上被关闭,那么。为了补偿损失,立即在SL上的订单 N X 收盘价,打开 订单 N - X1(体积= 0.3)。

我们必须要做的。

3 如果订单(体积=0.3)在SL上被关闭,只有 订单N-X 开仓小时值会 被记住,以补偿其开 仓时的 损失。

我知道如何打开这两个订单,但我不能找到我的方法,如何记住一个 在SL上关闭的0.1手量的订单 的小时值。

注意:这与同一勾股的订单关闭有关。

有时,在一个tick上有超过一个成交量为0.1和0.3的订单被关闭。

例如,如果3个0.1的订单 ,在一个SL上的一个tick上被关闭,而不是开3个0.3的订单 。- 只有1个0.3手的订单 被打开

在这种情况下,如果我在SL上只关闭1个0.3手的订单,那么当两个0.1手的订单被打开 补偿他们的损失时,我将不会得到小时的数值。

也就是说,在这种情况下,我需要开3个0.3手的 订单,而不是一个。


有时3个0.3手的订单会在一个点上被SL关闭,尽管它们对应的0.1手订单是在不同的点上打开的(但只是一个价格)。

在这种情况下,程序只为最后一笔0.1手的订单保存了正确的数值。

我需要程序保存SSL关闭的每个订单(0.1手)的小时值。


下面是我的代码,我们需要修改。

谢谢你的帮助。

int  A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
                                                
                                                
if(Bid == iOpen(NULL,PERIOD_H1,0))
if ( A!= Hour() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
A = Hour();
}                                               
//**************************************************************************************
int Счет=0, Номер=OrdersHistoryTotal()-1;
//int A1=0;
  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    A1=OrderOpenTime();
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет ==1&&A2!=OrderOpenTime())
    {
    A2=OrderOpenTime();
     OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
    }
  }
//************************************************************************************** 
return;
}

下面是一个例子,说明在一个tick上有几个订单被关闭的情况

        08:51:38.906    2017.03.27 13:09:44  Tester: stop loss #200  at 1.08858 (1.08856 / 1.08858)
2       08:51:38.906    2017.03.27 13:09:44  1 = 1 = 1 = 1 EURUSD,M1: open #214  sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #192  at 1.08879 (1.08877 / 1.08879)
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #193  at 1.08879 (1.08877 / 1.08879)
2       08:51:38.906    2017.03.27 13:10:28  1 = 1 = 1 = 1 EURUSD,M1: open #215  sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0       08:51:38.906    2017.03.27 13:10:29  Tester: stop loss #194  at 1.08880 (1.08878 / 1.08880)
 
AlGuru:

这是一个额外的条件。当价格越过МА线时,头寸就被关闭。有时,价格正好在这条线上打开,并在每一个刻度上开仓和平仓。我已经通过在下一个蜡烛之前平仓来解决这个问题。

要解决这样的问题,就应该检查在这根柱子上是否存在或曾经存在过开仓和平仓 的情况。

否则你会把一切都堆积起来。信号功能应该发送信号,而交易功能应该已经检查信号的有效性。

 

你好。为什么 欧元对美元货币对显示为 149.16325而不是1.0616?


原因: