MQL 4に関するプログラマーへの質問と回答 - ページ 6

 
コードが複雑なのか、もっとシンプルなものがあるのか?
 

1.注文券を 配列または2変数に格納する。

2.OrderSelectで1つずつ選択します(ここでは配列の方が便利です).

3.今、この瞬間のタイプを確認する。

4.OP_BUY || OP_SELLの場合→2枚目のチケットのOrderDelete。

 

簡単な例でお願いします!いろいろと理解できましたが、order selectが少し詰まっています。

 

以下は、エラーが発生するコードです。 1つのペンダントがトリガーされると2つ目のペンダントが削除されない ......。


if (MA1<MA2)
{
if(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,expiration)。
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb,0, MagicNumber,expiration)を実行。
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
さもなくば
//=================================================================================================================//
if (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 tool ", 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(オーダータイプ()==OP_SELL)
{
OrderDelete(t2)です。
}
}
//----
// BUYSTOPが発生した場合、SELLSTOPを削除します。
if(OrderSelect(t2, SELECT_BY_TICKET))
{
if(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では買いエントリーのポーズは1つだけで、ペンダントが2つあることです。

 

のチケットは、グローバル変数 で?(スタートなどの機能以外)

そうでない場合は、1目盛りごとにリセットされます。

Expert Advisor の各ステップでさらに Print()- を挿入すると、どこでクラッシュし、何ができないのかがわかります。

 

優勝 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

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

 
hasayama:

のチケットは、グローバル変数で?(スタートなどの機能以外)

そうでない場合は、1目盛りごとにリセットされます。

Expert Advisor の各ステップでさらに Print()- を挿入すると、どこでクラッシュし、何ができないのかがわかります。

チケットは最初からdoubleと宣言しているので、順番が1.0と2.0では登録できないことを見落としていました。 そのため、削除のための関数は浮動小数点を待っていたのです