エキスパートアドバイザー - 雑多な質問 - ページ 31

 
Max Enrik:


if
(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   Print(ticketnumber);

チケット番号を印刷する - 見た目が正しいことを確認する。

-----

マックス・エンリック

if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(Symbol()!=OrderSymbol()) continue;

         update_1();
         update_2();
         update_3();
        }
     }
   else printf("OrderSelect failed for %i",ticketnumber); 

}

オーダーセレクトが機能しているか確認 する

-----

マックス・エンリック
if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(Symbol()!=OrderSymbol()) continue;

         update_1();
         update_2();
         update_3();

        }
     }
  }

よくわからないんだけど

これは同じSymbolを持つ全てのオーダーを調べ、update_1() update_2() update_3() を実行するんだろう?ticketnumberで見つけた注文だけではありません。

 
honest_knave:

チケット番号を印刷してください。
-----
OrderSelectが動作していることを確認します。
-----
これは理解できない
これは同じSymbolを持つ全てのオーダーを調べ、update_1() update_2() update_3() を実行するんだろう?ticketnumberで見つけたオーダーだけでなく。

早速のコメントありがとうございます。
コメントいただいた後、もう一度確認しました。良さそうです。

#1 - チケット番号 - 正しい。
#2 - OrderSelect()は動作します。
#3 - そうです!おっしゃる通りですが、これを使わないとupdate_*()が機能しません。

私はその方法をドラッグに使い、その方法はうまく機能します。しかし、その方法はCHARTEVENT_OBJECT_CLICKでは うまくいきません。(単一注文の時はうまくいく。反対注文を出すとうまくいく。))

本当に助けが必要です、お願いします。

 
どうしたいのか、スクリーンショットを見せてください。問題が明確でない。
 
honest_knave:
起こしたいことのスクリーンショットを見せてください。問題がよくわからないのですが。

スクリーンショットを作っている間に、解決策を見つけました。(すでに2時間以上かかっています。)
ということで、今のところ問題なさそうですが、もし何か問題があれば、もっとはっきりしたコメントを書くつもりです。

お時間をいただきありがとうございました。

( 本当に不思議な感じでした。 )

 
Max Enrik:

スクリーンショットを作っている間に、解決策を見つけました。( このためにすでに2時間以上を費やしました)
それで、今のところ良さそうです。もし何か問題があれば、もっとはっきりしたコメントを書きます。

お時間をいただきありがとうございました。

( あれは本当に不思議でした。)

直ってよかったですね
 

#通貨建て利益計算 - Open

私はちょうど私が通貨で利益を計算 することができるという解決策を見つけるために始めた。

Q: 注文の利益(pips)を注文の利益(通貨)に変換する方法を教えてください。

(マーケットクローズまで解決策が見つからないのが心配です。)

どんな明確なコメントでも結構です。

よろしくお願いします。

//--- 2回目の編集

私は多くの同様のフォーラムを見つけましたが、私はこのタイプのトピックを見つけることができません。

 

pipsで利益を得るには?

OrderProfit()

返される値

選択された注文 の純利益値(スワップや手数料を含まない)です。

未決済注文の場合、それは現在の未実現利益です。

クローズド・オーダーの場合は、確定利益となります。

 
Marco vd Heijden:

pipsで利益を得るには?

OrderProfit()

返される値

選択された注文 の純利益値(スワップや手数料を含まない)です。

未決済注文の場合、それは現在の未実現利益です。

クローズド・オーダーの場合、それは確定利益です。

コメントありがとうございます。

すみません、Marcoさん、私の問題をもっと明確に説明していませんでした。
私は以下のコードで簡単にPipsと通貨で注文利益を得ることができます。

DoubleToString( OrderProfit(), 2 )
DoubleToString( change_to_points( Bid - OrderOpenPrice() ), 0 );

しかし、私は通貨でのストップロスとテイクプロフィットのためのソリューションを見つけることを試みる。

私はそれに取り組んでいる、私はまだ助けを必要とする、お願いします。

よろしくお願いします。

 
Max Enrik: ストップロスとテイクプロフィットを通貨建てで行う場合の解決策を考えてみました。
OrderStopLossを これらのいずれかに置き換えてください。
  • ストップを置くべき場所、つまり取引の理由がもはや有効でない場所に置くのです。例:サポートバウンドを取引する場合、ストップはサポートより下になります。
  • 口座残高 * パーセント/100 = リスク = OrderLots * (|OrderOpenPrice - OrderStopLoss| *DeltaPerLot+ CommissionPerLot) (OOP-OSL には SPREAD が含まれ、DeltaPerLot は通常約 $10/pip ですが、ペアと口座通貨の為替レートを考慮します).
  • TickValueを単独で使用しないでください -DeltaPerLot
  • ロットを正しく正規化 し、最小値と最大値を チェックする必要があります。
  • ストップ・アウトを 避けるために、FreeMarginもチェックしなければなりません。
 
whroeder1:
OrderStopLossで 代用してください。
  • ストップを置くべき場所、つまり取引の理由がもはや有効でない場所に置くのです。例:サポートバウンドを取引する場合、ストップはサポートより下になります。
  • 口座残高 * パーセント/100 = リスク = OrderLots * (|OrderOpenPrice - OrderStopLoss| *DeltaPerLot+ CommissionPerLot) (OOP-OSL には SPREAD が含まれ、DeltaPerLot は通常約 $10/pip ですが、ペアと口座通貨の為替レートを考慮します).
  • TickValueを単独で使用しないでください -DeltaPerLot
  • ロットを正規化 し、最小値と最大 値をチェックする必要があります。
  • ストップ・アウトを 避けるために、FreeMarginもチェックする必要があります。

より有益なコメントありがとうございます。
勉強中です・・・。

//--- 2回目の編集

コードの知識不足で、あなたの計算方法を理解することはできないかもしれません。
しかし、私は解決策に近いと思います。そして、私が取得した以下のコードを試してみました(買い注文の場合)ストップロスを通貨で表示します。
すると、このような結果が出ました。利益。7.67 USD - Pips:1001 / USDCADの場合。しかし、実際には利益: 7.69 USD。(私はすでにチェックアウトしました(スワップと手数料)。

double  tickvalue               = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE ),
        buy_stoploss_incurrency = OrderOpenPrice() - OrderStopLoss();
string  stoploss_incurrency     = DoubleToString( OrderLots() * buy_stoploss_incurrency * tickvalue + OrderCommission(), 2 );

Print( "stop loss in currency: ", stoploss_incurrency );

ということで、アドバイスお願いします。

ありがとうございました。

//--- 3回目の編集

コーダーまたはプログラマーの方、上記のコードが正しいかどうか教えてください。なぜなら、GBPCHFでは正しいストップロスが表示されますが、USDCADでは正しく表示されないからです。何が間違っているのかわかりません。( 注:USDCADはオープンポジションですが、GBPCHFはペンディングオーダーです。)

今のところ全てOKです。それで、William氏に感謝します。