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

 
BeerGod:

印字やコメントにマッピングする変数を文字列に変換するDoubleToStr( double value, int digits) で、希望する精度を設定する。

https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


OK、ありがとうございます。そのようにするか、ObjecCreate()を通して構築するか、も考えていたのですが...。
 
okvseok:

最後のテイクプロフィットまでの負け注文の回数をカウントする関数を提案してください。

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

こんな風に試してみてはいかがでしょうか。
//+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
  int loss = 0;
  for(int i=OrdersHistoryTotal()-1; i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

OrderProfit()、OrderType()等を使用する前に何回OrderSelectを 呼び出す必要がありますか? Start内部で1回で十分ですか?それともOrderProfit、OrderType等を使用する前に毎回OrderSelectを 呼び出す必要がありますか?

で、OrderSelectはOrderProfitの直前に呼ばれなければならないのか、それとも最初であればどこでもいいのか、?

 
hoz:

と質問を書きましたが、誰も気づいていないようでした。皆さんを混乱させないために、ここでこんな長い質問を書きたくなかったのです。ご注意ください...

https://www.mql5.com/ru/forum/142983

この方法で試してみてください。

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

なぜなら、あなたの注文がまったく同じ値段で、まったく同じ時間に始まったという保証はないからです。

 
hoz:

と質問を書きましたが、誰も気づいていないようでした。皆さんを混乱させないために、ここでこんな長い質問を書きたくなかったのです。ご注意ください...

https://www.mql5.com/ru/forum/142983

すでにそのスレッドで大まかなアルゴリズムをお伝えしていますし(ニュアンスを理解しやすいようにこちらで少し修正しました)、家庭菜園を始める必要はありません。


アルゴリズムは、ベーグルのようにシンプルです。

部分閉鎖でもMagicは変わりません。チケットは変わるが、マジックは変わらない。

開いているポーズと、そのポーズが部分的に閉じているべきレベルがあるんです。

Level1、Level2、Level3があるとします。

買いのポジションが利益を上げていて、Bid >= Level1 && Bid< Level2 ---> の場合、ポジションの最初の部分を決済します(このポジションのロットより小さいロットで、残りのロットが最小ロットを下回らないことが条件)、その後、決済します。

Bid >= Level2 && Bid< Level3 ---> 後半のポジションをクローズ(このポジションのロットより小さいロットで、ただし残りのロットが最小ロットを下回らないこと)、さらに。

Bid >= Level3 && Bid<Level4 ---> 3番目のポジションをクローズ(このポジションのロットより小さいロットで、ただし残りのロットは最小ロットを下回らないこと)、さらに。

1.レベルBid>=LevelXで部分決済した際に、ロットが最小ロットより少なくなっていたら ---> 全ポジションを決済する

2) Bid>=Level3で3回目の決済を行った後、まだポジションがある場合は、Level4通過後に残りのポジションにトロールを伴うか、一度に決済を行う。

以上です。

売りの場合は、Ask: Ask<=Level1 && Ask>Level2 ... を見ます。等 ...

すべてのポジションでループを行い、インデックスでそれぞれを選択し、選択したポジションのレベルとクロージングロットを計算し、作業アルゴリズムを楽しむことができます...:)

同時に、これらのレベルの値をEAのメモリ(変数)に保存する必要がないので、非常に便利です。EAが何らかの理由で作業を終了した場合、再開後にレベルのデータを失うことはなく、各ポジションについてその場で再計算されます。

もう一つ、部分終値の後、保護ストップのリトレースを忘れないでください。レベル1の終値後-ブレークイーブンでストップ、レベル2の終値後-レベル1でストップ、レベル3の終値後-レベル2でストップ、などなど・・・。


 
こんにちは、どなたかカスタムインジケーターを 使用したExpert Advisorの例をお持ちの方はいらっしゃいませんか?
 
dimarik0000:
皆さんこんにちは!どなたかカスタムインジケーターを使ったEAの例をお持ちの方はいらっしゃいませんか?
何が問題なのか?
 
artmedia70:
何が問題なのか?


カスタムインジケーターを Expert Advisorのコードに転送する記事を読みましたが、混乱してしまいました。 やるべきか、それともコードに特定のインディケーターのパラメーターを指定すれば十分なのでしょうか?
 
dimarik0000:

カスタムインジケーターをExpert Advisorのコードに移植するという記事を読んで、混乱しています。
経験が浅い場合は、iCustom() を使用するか、インジケータの動作原理を十分に勉強して理解してからExpert Advisorにロジックを追加したほうがよいでしょう。
 

713
borilunad 15.01.2013 12:10

この関数を挿入したとき、なぜ|isCloseLastPosByTake() == True||テスターのエキスパートが非常に遅くなり始めたのか、10倍!|1つの謎を解いていただけませんか?これは4つの互いに排他的な条件のうちの1つなので、コードの実行を速くするためにsummed条件のようにif chainを使うことはできないんだ。何かアドバイスはありますか?アドバイスをよろしくお願いします。