記事"EAの元のコードを変更することなく、テイクプロフィットの代わりにリミットオーダーを使用する"についてのディスカッション - ページ 5

 
本当にありがとう。愛してるよ。
 

こんにちは

私のTP プレーンは:チャートで例えば買いを設定し、それが正しい方向に進み、利益を得たとき、TP値は最大利益ポイントに移動します。トレンドが直線的に下降する方向に変わったとき、TP値は最大利益の70%に配置されます。

double BuyPipsProfit,SellPipsProfit,BuyProfitLevel,SellProfitLevel;
double TP_Buy=0;
double TP_Sell=0;

for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
BuyPipsProfit= Ask-(double)OrderOpenPrice() ;
SellPipsProfit= (double)OrderOpenPrice()-Bid;
BuyProfitLevel= BuyPipsProfit*.7;
SellProfitLevel= SellPipsProfit*.7;
TP_Buy = (50*Point)+ ((OrderOpenPrice()+ BuyProfitLevel)*Point);
TP_Sell= (50*Point)+ ((OrderOpenPrice()+ SellProfitLevel)*Point);
}
}.

 

こんにちは、

うまくいきません。

LimitTakeProfit.mqhエラーです:

unresolved static variable 'CLimitTakeProfit::i_Magic' LimitTakeProfit.mqh 29 43
unresolved static variable 'CLimitTakeProfit::b_OnlyOneSymbol' LimitTakeProfit.mqh 32 52
unresolved static variable 'CLimitTakeProfit::i_TakeProfit' LimitTakeProfit.mqh 507 14
unresolved static variable 'CLimitTakeProfit::d_TakeProfit' LimitTakeProfit.mqh 512 17
unresolved static variable 'CLimitTakeProfit::c_Symbol' LimitTakeProfit.mqh 160 9

ありがとうございます。

ファイル:
 

MetaQuotes、このコードをありがとう!

この関数にバグを見つけたので、私のささやかな解決策を述べます:

bool CLimitTakeProfit::SetTakeProfits(ulong position_ticket, double new_tp=0)


もし2つのTPがあり、最初のTPがクローズされた場合、2番目のTPはここでクローズされません:

if(CheckLimitOrder(tp_request))
  {
   if(tp_request.volume>=0)
     {
      closed+=tp_request.volume;
      closed_perc=closed/position_volume*100;
     }
   else
     {
      fix_closed_per-=tp_request.volume/(position_volume-tp_request.volume)*100;
     }
   continue;
  }


なぜか?なぜかというと、この関数で最初のTPを検索するときに、選択位置を変えているからです:

CheckOrderInHistory(PositionGetInteger(POSITION_IDENTIFIER),request.comment, request.type, request.volume);

ループの中で、選択された位置が変わるからです:

   for(int i=0;i<total;i++)
     {

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)

ループの中で:2つ目のTPを評価するために間違った位置を使う:

switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE))


つ目のTPがクローズされる!修正しました:

for(int i=0;i<total;i++)
   {
      /******改行 **********/
      PositionSelectByTicket(position_ticket);
      /******改行 **********/

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)


ありがとうございます!

 
Roco Deodato Giaculi #: こんにちは、動作しません。LimitTakeProfit.mqh error: ありがとうございます。

元のコードを使用しましたか、それともあなたのアドバイザーにコードを追加しましたか?

 

うまくいったためしがない。

 

こんにちは、Dmitriy Gizlyk です。いろいろ試したのですが、このエラーから抜け出せません。もし助けていただけるなら、ありがとうございます。


 
助けてくれませんか?プログラムの組み方などは知りません。私はただ、利益を 限定注文としてプロットしたかっただけなのです。
 
FalconGhost2 : 助けてくれませんか?プログラムの組み方などはわかりません。ただ、利益を 指値注文としてプロットして欲しかっただけなのです。

こんにちは、マニュアル取引ではこのファイルは使えません。EAで使用するためのものです。

よろしく、ドミトリー。

 
Dmitriy Gizlyk #: こんにちは、このファイルはマニュアル取引では使用できません。EA用です。よろしくお願いします。

返信ありがとうございます!マニュアルトレードを行う他の方法があるかご存知ですか?