关于MQL 4的程序员问题和答案 - 页 6

 
代码是否复杂,还是有更简单的东西?
 

1.在一个数组或2个变量中存储订单票

2.用OrderSelect一个一个地选择它们(这里的数组更方便)。

3.检查当前时刻的类型。

4.如果类型为OP_BUY || OP_SELL -> 第二张票的OrderDelete。

 

请用一个简单的例子来帮助我,我明白了很多东西,但顺序选择有点卡住了!

 

以下是错误的代码,????? 当一个吊坠触发......,不会删除第二个吊坠。


如果(MA1<MA2)
{
如果(n==0)
{
//==================================================================================================================//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,Slb,tpb,NULL,MagicNumber,0,CLR_NONE)。
if(tiket<0) Alert("Error # - ",GetLastError()," On instrument " , Symbol()); //write error//
//================================================================================================================//
t2 = OrderSend(Symbol(, OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,peration);
//================================================================================================================//
t1 = OrderSend(Symbol(, OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration)。
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
否则
//=================================================================================================================//
如果(MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE) 。
if(tiket<0) Alert("Error # - ",GetLastError()," On instrument " , Symbol()); //write error//
//================================================================================================================//
t2 = OrderSend(Symbol(, OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration)。
//================================================================================================================//
t1 = OrderSend(Symbol(, OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,peration)。
//================================================================================================================//
}
//==================================================================================================================//
// 如果SELLSTOP已经触发,则删除BUYSTOP
如果(OrderSelect(t1, SELECT_BY_TICKET))
{
如果(OrderType()==OP_SELL)
{
OrderDelete(t2)。
}
}
//----
// 如果BUYSTOP已经触发,删除SELLSTOP
如果(OrderSelect(t2, SELECT_BY_TICKET))
{
如果(OrderType()==OP_BUY)
{
OrderDelete(t1)。
}
}

 

你对这些条件感到困惑。我认为你把{}括号放在了错误的地方。

if ( n == 0 )
{
        if (MA1<MA2) 
        {
                //==================================================================================================================//

                tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE); 
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку// 
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
                //================================================================================================================//

                //==================================================================================================================//
        }
        //==================================================================================================================// 
        else 
        //=================================================================================================================// 
        if (MA1>MA2) 
        {
                tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку//
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
        //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
        if(OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
        if(OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

或者类似这样的事情。

 
没有工作,不幸的是........
 

令人惊讶的是,我有一个类似的EA。我用它检查了所有的东西,原则上都是一样的。 它可以使用,而这个不可以...

不同的是,另一个EA只有一个买入的姿势和两个垂线。

 

全局变量 中的门票?(在启动和其他功能之外)

如果没有,它们就会在每一次打勾时被重置。

在专家顾问的每一步插入更多的Print(),然后你就会明白它在哪里崩溃,以及它没有做什么。

 

hooray aaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 获奖者 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama:

全局变量中的门票?(在启动和其他功能之外)

如果没有,它们就会在每一次打勾时被重置。

在专家顾问的每一步插入更多的Print(),然后你就会明白它在哪里崩溃,以及它没有做什么。

我非常感谢你,我忽略了一点,我一开始就把票据声明为双数,而顺序不能登记为1.0和2.0,这就是为什么删除的函数在等待浮点