[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 88

 

わかりました。やめましょう。お互い、知識が足りないようです。質問の著者は、StopLossを変更する方法を尋ねました。深みにはまることはないと思います。

OrderSend 関数の後に代入してみる

 
MaxZ:

OrderSend関数の数字「12」とは何ですか?:(

そして、オーダーの選択についても誤解が...。そうあるべきなのです。

こんにちは。

どうもありがとうございました!!!お返事ありがとうございました!!!

私の表現が悪かったのでしょうか、発想はこうです。

1.4545で売りトレードを行い、価格がトレンドに逆行する1.4585になったら、1.4565に買い注文を 出します。

私のコードが正しく動作していません。

void otlogka (int order)
{  
   int a, k=OrdersTotal();
   for (a=k-1; a>=0; a--){
         if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==OP_BUY){
               if (Bid*Point-OrderOpenPrice()>40)
               RefreshRates();
               if (k>1){
                  {
                     order=OrderSend(Symbol(),OP_SELLLIMIT,0.02,OrderOpenPrice()+20*Point,1,SL,0,"Otlogka",mn,5,0);
                  }}}}}
    
           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

}

助けてください!!!

 
FOReignEXchange:

OrderSend関数の実行中に、価格が変化する可能性があることをお伝えしました。ですから、すでに変化してしまったものを後から割り当てる必要があります。

そういうやり方もあるんですね。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, 0, 0, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         SL = OrderOpenPrice()-StopLoss*Point;
         TP = OrderOpenPrice()+TakeProfit*Point;
         
         Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
         if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
            Alert("Ордер Buy ", Ticket, " модифицирован.");
         else
            Alert("Ошибка: ", GetLastError());
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}
それぞれのアプローチには長所と短所があります。
 
smartemiy:

こんにちは。

どうもありがとうございました!!!お返事ありがとうございました!!!

発音を間違えたのでしょう。発想はこうです。

1.4545に売りトレードがあり、価格はトレンドに逆行する1.4585...そしてTHEN - 1.4565にペンディングオーダーを置く必要がある。

私のコードが正しく動作していません。

助けてください!!!

BidとAskにPointを乗算してはならない。すぐに目に留まりました。

条件の組み立て方が違うはずです。

if (Bid-OrderOpenPrice() > 40*Point)
{...}
if (OrderOpenPrice()-Ask > 40*Point)
{...}

また、SLがどのような変数なのかも不明ですが?どんな価値があるのでしょうか?どこで計算するのですか?

そして、この

           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

ループにしたほうがいい。注文検索を伴うループは、BUY注文とSELL注文で共通にする必要があります。

よっぽどプログラミングが苦手なんですね。教科書をもう一度読んで、簡単なExpert Advisorの書き方、注文の計算、取引機能などの例を見ることをお勧めします。


RefreshRates()は、定義済み変数や 時系列配列を使用する前であって、後ではないのですが・・・。

 
MaxZ:

BidとAskにPointを乗じる必要はありません。すぐに目に飛び込んできたのは...。

条件の組み立て方が違うはずです。


括弧をつける必要はないのですか?

if ((Bid-OrderOpenPrice()) > 40*Point)
{...}
if ((Ask-OrderOpenPrice()) < 40*Point)
 
MaxZ:

BidとAskにPointを乗じる必要はありません。すぐに目に飛び込んできたのは...。

条件の組み立て方が違うはずです。

また、SLがどのような変数かわからないのですが?どんな価値があるのでしょうか?どこで計算するのですか?

そして、この

ループに入れなければならない...。

本当にプログラミングが苦手なんですね...。もう一度チュートリアルを読み直し、簡単なExpert Advisorの書き方、注文の計算、取引機能の例を見てみることをお勧めします。

これが通常のストップロス=SL
 
FOReignEXchange:


ブラケットを使わなくていいんですか?

必ずしもそうではありません。ブラケットなしでも使える!:)

好みによりますね。手書き!?:D

 
smartemiy:
これは通常のストップロス=SLです。
どのように算出するのですか?また、なぜBUYとSELLで共通なのかというと、

smartemiy:

1.4545で売りトレード...価格がトレンドに逆行する1.4585...そしてTHEN-1.4565に保留オーダーを置く必要があります。

ちなみに、トレンドに反している場合は、条件がマイナスになるはずです。

if (Bid-OrderOpenPrice() < -40*Point)
{...}
if (OrderOpenPrice()-Ask < -40*Point)
{...}

通常、表現から

 ProfitBUY  = Bid-OrderOpenPrice();
ProfitSELL = OrderOpenPrice()-Ask;

対応する取引の利益をpipsで求めることができる。利益がマイナスであれば、それはすでに損失です。ここでは、損失が40pips以上であれば、保留注文を 出す必要があることを確認します。

 
MaxZ:
どのように算出するのですか?また、なぜBUYとSELLで共通なのかというと、 。

ストップロスは それほど重要ではない、今...

を調整することで、理論的にはうまくいくのでしょうか?

 
smartemiy:

ストップロスはそれほど重要ではない、今...

このコード、理論上はうまくいくのでしょうか? あなたの修正で

動くかもしれないが、正しく動くかどうか?

再び、あなたの問題から。

スマートミー

"売り取引は1.4545で行う...価格はトレンドに逆らう - 1.4585... そしてTHEN - 保留注文は1.4565に置くべきである"...

売り注文が発注されました。OrderOpenPrice()は1.4545を返します。

トレンドに逆行する価格。アスク=1.4585。コンディション

if (OrderOpenPrice()-Ask <= -40*Point)

動作します("<="記号を付けてください)。

次のコードを解析してみましょう。

order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);

1.4545-20*ポイント=1.4525の価格で買い指値注文を保留して います。1.4565でなければならない。


しかし、その前に、コード全体を書き換えてみてください。間違いが多く、何を書いているのか理解できていないように見える断片もあります。

理由: