[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 47

 
Tiken123:

SLによるCLOSEDポジションの損失残高とOPENの利益トレードの合計残高を計算する関数をご存知の方、書き込みをお願いします。

損失残高の計算は、最後の最大入金額から開始する必要があります。

ご質問の内容が前回のものとやや似ているので、前回の回答の機能を少しいじってみました。正直なところ、私はテストしていませんが、うまくいくはずです。グローバルレベルで宣言される変数利益と損失は、クローズしたポジションの 合計利益と損失をそれぞれ表示する必要があります。

もし、未決済注文にもこの処理を行う必要がある場合は、履歴ではなく、OrdersTotal()の基準に従って注文を選択するための2番目のループを追加します: for(int n=1; n<=OrdersTotal(); n++)

そして、得られた値を同じ変数profitとlossに加えます。

//+----------------------------------------------------------------------------+
// Прибыльно или убыточно закрылся последний ордер, и возврат типа такого ордера
int fHistory(){
  profit = 0; loss = 0;
  for(int i=OrdersHistoryTotal(); i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() > 0 ) profit = profit+OrderProfit(); // Если прибыль по посл.ордеру - суммируем

        if(OrderProfit() < 0 ) loss = loss + OrderProfit();   // Если убыток по посл.ордеру - суммируем

     }
  }
  return(-1);
}
 
Twilight:

例えば、保留中の買い指値が発動されたかどうか、発動された場合はどの価格で発動されたかを知り、新たに設定する必要があるのです。

OrderType()関数で1ティックごとにOP_BUYLIMITタイプの注文があった場合、このタイプが消えたら、注文がオープンしてOP_BUYになったことを意味します。全6種類を掲載して います。OrderOpenPrice()関数を使用すると、注文がどの価格で開始されたかを知ることができます。
 
Twilight:

トレーリングストップが発動されたことを確認し、トレーリングストップが発動されたときに新規注文を出すにはどうすればよいですか?

注文を閉じるという意味ですか、それとも修正するという意味ですか?
クローズドなら、クローズしたばかりでも必要なのでしょうか?それともStopLossで決済したのでしょうか?(TakeProfitとOrderClose()またはOrderCloseBy()で閉じる場合もある)
 

ここでは、新しいバーコントロール機能を紹介します。

bool IsNewBar()
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

ここで、i_trading_TF はグローバルに外部宣言された変数である。したがって、チャート上でExpert Advisorを設定する際に、この変数の値をポップアップウィンドウで設定することで、制御したいバーのオープニングのタイムフレームを設定することができるのです。

あるExpert Advisorで同様の機能を見たことがありますが、関数ヘッダに正式なパラメータが ありました。これです。

bool IsNewBar(int i_trading_TF)
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

時間軸は関数パラメータで渡される。しかし、i_trading_TF 変数がグローバルレベルで宣言されている場合、その可視性は制限されないので、形式パラメータで渡すことは意味が ないと思います。

この点についてコメントをお願いします。

しかし、プログラマの中には、自分ではやらないような関数にまで正式なパラメータを詰め込む癖のある人がいるのは不思議なことです。

 
pu6ka:
毎ティック、OrderType()関数でOP_BUYLIMITタイプの注文の有無を監視し、 このタイプが消えたら、OP_BUYタイプになった注文がオープン したことを意味します。全6種類を掲載して います。OrderOpenPrice()関数を使用すると、注文がどの価格で開始されたかを知ることができます。
そうである必要はないのです。手動で殺すことができる。むしろ、注文のチケットを記憶しておく必要がある。このチケットの注文がなく、同じチケットのマーケットポジションが現れるとすぐに、そう、それがトリガーされるのだ......。
 
hoz:

ここでは、新しいバーコントロール機能を紹介します。

ここで、i_trading_TF はグローバルに外部宣言された変数である。したがって、チャート上でExpert Advisorを設定する際に、この変数の値をポップアップウィンドウで設定することで、制御したいバーのオープニングのタイムフレームを設定することができるのです。

あるExpert Advisorで同様の機能を見たことがありますが、関数ヘッダに正式なパラメータがありました。こんな感じです。

時間軸は関数パラメータで渡される。しかし、i_trading_TF 変数がグローバルレベルで宣言されている場合、その可視性は制限されないので、形式パラメータで渡すことは意味が ないと思います。

この点についてコメントをお願いします。

しかし、プログラマの中には、自分ではやらないような関数にまで正式なパラメータを詰め込む癖のある人がいるのは不思議なことです。

EAが複数のフレームを分析し、すべてのフレームで新しいバーが 形成されなければならない場合、これは理にかなっています。

それだけでなく、転送されたパラメータに楽器名を追加してみましょう。

bool IsNewBar(string Symb,int i_trading_TF)
{
  if(bartime != iTime(Symb,i_trading_TF,0))
  {
    bartime = iTime(Symb,i_trading_TF,0);
    return(true);
  }
  
  return(false);
}
と、どの時代のどの楽器にも新しいバーが形成されている事実を分析します。
 
artmedia70:
必ずしもそうではありません。また、手動で殺すことも可能です。むしろ、保留中の注文のチケットを覚えておく必要があります。そのチケットの保留中の注文が見つからず、同じチケットのマーケットポジションが現れるとすぐに、はい、トリガーされます...。

はい、その方が正しいです。でも、そんな風にテスターでアイデアを確認することができるんです。4種類の保留注文をトレースするには、ティックをトレースするための4つの変数が追加で必要です。1つのタイプに複数の保留がある場合は、チケット用の変数をぜひ導入してほしいが。
 
r772ra:

EAが複数のフレームを分析し、各フレームが新しいバーを形成するという事実を必要とする場合、これは理にかなっています。

それだけではありません。パラメータに楽器名を追加してみましょう。

と、新しいバーが形成された事実を分析する、任意のシンボル、期間。

新しいバーを 探す仕組み」に記号を「巻き込む」のは合理的だと思いますか?:)))
 
TarasBY:
新しいバーを見つける仕組み」に記号を「巻き込む」ことが適切だと思いますか?:))

新しいバーの ユニバーサルコントロールを作ると面白いかもしれませんね。ところで-すべてはそのためにある
 
Vinin:

新しいバーのユニバーサルコントロールが出来たら面白いですね。ところで-すべてはそのためにある
検討」と「DC」の話ですか!?;)