[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 98

 
Foxyさん、ArraySearchDouble関数のコードはどうでしょう、ありますか?これがなければ、プログラムが何をするのか理解するのはもっと難しくなる)
 

こんにちは!トレーリングストップ機能はこちらです。自分のコードが大きく変わるので、変え始めたらエラーに対応するのが大変になる

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

こんにちは!トレーリングストップ機能はこちらです。コードを大幅に変更することになる、変更し始めるとエラーに対処するのが大変だ。

Stoplevelを考慮していないので、ECN/NDDでない場合、"間違ったストップ"というエラーが発生することがあります。

また、一般的に、OrderModifyの後は、念のため、すべてのエラーを処理する方がよいでしょう。

 
alsu:
Foxy さん、ArraySearchDouble関数のコードはどうなっているのでしょうか?これがないと、プログラムが何をするのか理解するのがずっと難しくなる)


これらはすべてKimIVからの機能であり、私が解明しようとしていることです。以下はそのコードです。


説明: double 型の値を用いて配列の要素を検索し、見つかった要素のインデックスまたは-1 を返す。この関数は,1つの要素のみを検索し,結果が正であれば検索を終了します.

  • m- 要素が探索される配列.
  • e- 配列m に含まれる double 型の値.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
プロフェッショナル、私は何を間違えているのでしょうか?新しいバーが 表示されたときに、インジケータウィンドウを再描画する必要があります。If (Bars != Prebars) WindowRedraw();
動作しません。PreBarsは、前のティックのバーの数に等しいです。もしかして、入れる場所や機能を間違えてしまった?
 
kon12:
プロフェッショナル、何が間違っているのか教えてください。新しいバーが表示されたときにインジケータウィンドウを再描画したいのですが、どうすればいいですか?if (Bars != Prebars) WindowRedraw();
何も生まない。置き場所が悪いのか、何かが間違っているのか?

何かを描き 直すには、まずそれを描かなければ ならない。
 
sergeev:

何かを描き直す には、まず描かなければ ならない。


全て完璧に描画され、インジケータはジグザグをベースにしていますが、新しいバーが 表示されると、曲線は全て描き直されるはずなのに、新しいバーでインジケータの値が追加されるだけです...。

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0) です。

 
kon12:


すべてうまく描画され、インジケータはジグザグをベースにしていますが、新しいバーが表示されると、曲線はすべて描き直されるはずなのに、新しいバーのインジケータの値だけが追加されます...。

int init() {
SetIndexBuffer(0,ZZ)を設定します。
SetIndexStyle(0,DRAW_SECTION)を設定します。
SetIndexEmptyValue(0,0.0);

WindowRedraw()は、グラフィカルなオブジェクトを再描画します。バッファとは関係ない。
 
Zhunko:
WindowRedraw()は、グラフィカルなオブジェクトを再描画します。バッファとは関係ない。

了解...再描画で別の方法があれば教えてください。
 
kon12:

了解...再描画で別の方法なら?
コードを表示すれば、即座に回答が得られます。