ヘルプが必要です - ページ 8

 
qgmql:

このコードは大丈夫ですか?そうでない場合は、リンクの代わりにいくつかのコードを書いてください、私はまだ混乱しています。


NOhttps://www.mql5.com/en/forum/133792/page3#550831

特定のシンボルで取引されたロットのpipvalueを与える

 

1.すべての注文は同じ通貨ペア です。EAはどのようにして最後に開いた注文だけを選択してその逆指値をチェックするのでしょうか?

2. すべてのオープンオーダーはtp20で異なる価格で発注されています。EAは最後のオーダーを除くすべてのオープンオーダーを修正し、それらのストップリミットを最後のオープンオーダーのストップリミットに変更することは可能ですか?

Sr    type   price     tp
1     buy    1.23950   1.23750
------------------------------
#  buylimit   1.23750   1.23550

//////////////////////////////

1    buy     1.23950   1.23550 // tp modified and now equal to 2nd tp
2    buy     1.23750   1.23550 // 2nd tp
------------------------------
#  buylimit   1.23550   1.23350

//////////////////////////////

1    buy     1.23950   1.23350 // tp modified and now equal to 3rd tp
2    buy     1.23750   1.23350 // tp modified and now equal to 3rd tp
3    buy     1.23550   1.23350 // 3rd tp
------------------------------
#  buylimit   1.23350   1.23150
 

いくつかの混乱...

//Signal Filter
#define  XXX   0
#define  AAA   1
#define  BBB   2

int SignalS = XXX;

if(SignalS & AAA !=0)
OrderSend(NULL, OP_BUY, LotSize, Ask, Slippage, SL, TP, WindowExpertName(), MagicID, 0, Blue);

古いエディタはハイライトされた行を受け入れるが、新しいエディタは "Expression not boolean "という警告を出す。

そこで試したのが...

if(SignalS && AAA !=0)
//or
if(SignalS !=0 & AAA !=0)

新しいエディタは両方を受け入れますが、...どちらがハイライトされた行のように同じように動作しますか? もし両方が本当なら、私はどちらを使うべきですか?(より便利ですか?)

追記:以下のコードは新しいエディタでも受け入れられました...

if((SignalS & AAA) !=0)

新しいエディタは3つとも受け入れますが、...どれがハイライトされた行と同じように動作しますか? もし全部が本当なら、どれが私にとってより便利 ですか?

 
qgmql: 新しいエディタでは3つとも使えますが...どれがハイライトされた行と同じ働きをするのでしょうか? もしすべて正しいなら、どれが私にとってより便利な のでしょうか?
  1. ビットマスクは使用しないでください
    //Signal Filter
    #define  XXX   0
    #define  AAA   1
    #define  BBB   2
    
    int SignalS = XXX;
    
    if(SignalS & AAA !=0)
    enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if(SignalS == AAA)
    
    自己文書化コード。

  2. ビットマスクを使用する。
    ビルド600以上では、!=はビットワイズより 優先順位が高いので、!=を使わなければ なりません。
    (SignalS & AAA) !=0
    以前のビルドでは、ビット単位で、 乗算より上位だった

    演算

    説明

    実行順序

    ()

    []

    .

    関数呼び出し

    配列要素の参照

    構造体要素の参照

    左から右へ

    !

    ~

    ++

    --

    (タイプ)

    sizeof

    論理否定

    ビット単位の否定(補数)

    符号の変更

    1つインクリメント

    1つ減算

    タイプキャスティング

    バイト単位でのサイズ決定

    右から左へ

    *

    /

    %

    乗算

    除算

    モジュール分割

    左から右へ

    +

    足し算

    減算

    左から右へ

    <<

    >>

    左シフト

    右シフト

    左から右へ

    <

    <=

    >

    >=

    未満

    以下または等しい

    より大きいか等しい

    左から右へ

    !=

    等しい

    等しくない

    左から右へ

    &

    ビット単位のAND演算

    左から右へ

    ^

    ビットごとの排他的論理和

    左から右へ

    |

    ビット毎OR演算

    左から右へ

    &&

    論理積演算

    左から

    ||

    論理和演算

    左から右へ

    ?:

    条件演算子

    右から左へ

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    代入

    代入による乗算

    割り付けによる除算

    代入付きモジュール

    代入のある足し算

    割り付けによる減算

    割り当てを伴う左シフト

    代入付き右シフト

    ビット単位のAND(代入あり

    排他的論理和(代入あり

    ビット毎OR(代入あり

    右から左へ

    ,

    カンマ

    左から右へ

    () 関数呼び出し 左から右へ [] 配列要素への参照
    !      論理否定 右から左へ - 符号変換 ++ インクリメント -- デクリメント ~ ビット単位の否定(補数) & ビット単位の演算 AND 左から右へ | ビット単位の演算 OR ^ ビット単位の演算 排他的論理和 << 左シフト >> 右から左へ
    ビット演算 AND 左から右へ|ビット演算 OR ^ ビット演算 排他的論理和 << 左シフト >> 右シフト
    * 乗算 左から右へ / 除算 % モジュール除算
    + 足し算 左から右へ - 引き算
    < 小さめ 左から右へ <= 小さめまたは等しい > 大さめ >= 大さめまたは等しい == 等しい!= 等しくない
    || 論理 OR 左から右へ
    論理AND 左から右へ
    = 右から左へ += 代入 加算 -= 代入 減算 *= 代入 乗算 /= 代入 除算 %= 代入 モジュール >>= 代入 右シフト <<= 代入 左シフト &= 代入 ビットワイズ AND |= 代入 ビットワイズ OR ^= 代入 排他的論理和
    , カンマ 左から右へ
 

WHRoeder あなたのコード(最後の成行注文を選択)を見つけ、そのTP価格をチェックし、以前の注文に同じTP価格を設定するためにハイライトされた行を追加 しました。

int PositionIndex;    //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP=0;
TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )      // <-- or is it a Sell Order ?
   if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
      //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

追加行...

if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);

もし私が間違っているならば、ご指導ください。

(すべての成行+保留の注文の種類は、買いだけ、 売りだけ、 買いだけでなく、新しい成行 注文が開かれたときに、すべての成行注文の TPを毎回変更したいのです)。

これは私にとって本当に難しいことですが、やってみたいのです :(

 
中括弧を使用していないため、インデントが正しくありません
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
あなたのコードは実際どうなのか
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); 
break;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
私は物事が複雑になっています。最初からコードを書いて、その部分をここに貼り付けます。