どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1059

 
artmedia70:

そして、何を再描画したいのかを具体的に説明する必要があります。

すべてのインジケーターバッファーの再計算が必要な場合があります。
指標の動作や内部変数の外部変化に対する反応を実験してみなければならない。

正直、試したことはありません(いや...まあ、確かにやったことはありますし、イベントに反応して必要なものを描画するインジケータは何度も作りました。でも、もともとバッファの描画には非標準的な方法をとっています)。何か(直近のバーで画面上に少なくとも2〜3点)を描画するテスト・インジケータを作成し、イベントを使用してそのバッファ値を変更してみてください。もし変わるのであれば-これは指標に働きかける一つの方法であり、そうでなければ-これは別のアプローチとして検討されるべきものです。すべての計算をタイマーに移すか、OnChartEvent()で直接、目的のイベントが検出された後に再計算の1サイクルを行う必要があるかもしれません...。

要するに、実験が必要なのだ...。

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

 
artmedia70:

なぜかTakeProfitが出現しても集計が中断されない。履歴にあるすべてのマイナスをカウントします。
 
Neron_plus34:
なぜかTakeProfitが出現しても集計が中断されない。履歴の中にあるマイナスをすべてカウントするのです。
ループを展開します。
 
artmedia70:
ループを展開します。
ありがとうございます。
[Удален]  

こんにちは・・・ForexClubでダウンロードしたMT4で取引していたのですが・・・InstaForexで別の口座を開くことにしました・・・しかし、別の口座に接続すると株価の画面が「更新待ち」・・・もう一度「チャートを開く」を選ばないと必要な画面が開かない・・・メーカーからMT4ダウンロードしようとすると取引口座に接続できない・・・ピスがつながらない・・・何が悪いんでしょうか・・・よろしくお願いします・・・・・。

 
Forexman77:

ありがとうございます!やりましたよ

線をドラッグした後にインジケータを再描画させるには?

// Определение LastBar по расположению StopLine на графике
bool fNewStopLine(){
   bool New;
   int StopBar, Error;
   double Shift;
   datetime StopLine;
   if( ObjectFind("StopLine")==0 ){                // Есть стоп-линия
      StopLine=ObjectGet("StopLine",OBJPROP_TIME1);// Время стоп-линии
      StopBar=iBarShift(NULL,0,StopLine);          // Бар стоп-линии
      LastBar=StopBar+1;                           // Бар окончания построения
      if( StopBar<=БарОкончания ){                 //    правее или на последнем баре
         LastBar=БарОкончания;                     // Перенести на нулевой бар
         StopBar=LastBar-1;
         StopLine=Time[StopBar];
         if( !ObjectMove("StopLine",0,StopLine,0) ){
            if( !РежимОтладки ) PlaySound("alert.wav");
            Print("***   StopLine - объект не перемещен, ошибка "+GetLastError());
      }  }
      if( StopLine!=OldStopLine ){                 // Новая стоп-линия
         ReInit();                                 // Повторная инициализация
         ClearScreen();                            // Очистить экран
         Shift=0.01*(WindowPriceMax()-WindowPriceMin())*СдвигИндикатораТиков;
         Error=fArrow("TickIndicator","",0,StopBar // Сформировать индикатор тика
                     ,WindowPriceMin()+Shift,0,0,0,0
                     ,ЗнакИндикатораТиков,ЦветИндикатораТиков,РазмерИндикатораТиков);
         OldStopLine=StopLine;                     // Стоп-линия обработана
         New=true;                                 // Выполнить построение заново
      }
      else{                                        // Нет новой стоп-линии
         New=false;                                // Построение заново не выполнять
   }  }
   else{                                           // Нет стоп-линии
      New=false;                                   // Построение заново не выполнять
      Error=fObjectDelete("TickIndicator");        // Удалить индикатор тика
   }
   return(New);
}
 
tara:

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

問題に直面しています。あるインジケーターをベースに自分でインジケーターを開発しているのですが、よくわからない文字列があり、その文字列はDLLライブラリを使っています。このセリフは何のためにあるのか、ご自身の言葉で教えてください。dllライブラリを使用せずに変更するにはどうしたらよいですか?以下、これらの行を強調しました。

#import "user32.dll"
        int  RegisterWindowMessageA (string lpString); 
        int  PostMessageA           (int hWnd,int Msg,int wParam,int lParam);
                
#define  WM_COMMAND                     0x0111
#import

            int MT4InternalMsg;
            int hwnd;
            string sn; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

  if(MT4InternalMsg == 0)  
         {
         MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); 
    }       
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
      
  }

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
                  hwnd = WindowHandle(Symbol(), 1);
        if(PostMessageA(hwnd, 0x0111, 0x822c, 0) == false)
          {
          hwnd = 0;
          return;
          }
          PostMessageA(hwnd, MT4InternalMsg, 2, 1);    
  }
//+------------------------------------------------------------------+
 
1.同時に2つ以上の注文を出すにはどうしたらよいですか?
2.注文がTPまたはSLでクローズしたことを知り、このイベントで何かを呼び出すにはどうすればよいですか?
3.Expert Advisorによる実際の取引では、どのような問題が発生する可能性があるのでしょうか?自分のTP、SL、Pendingなどがサーバーで実行されないことがあるのですか?そんなとき、あなたならどうしますか?トレードログを確実に保存する場所はどこですか(グローバル変数、ターミナル、ファイルなど)?
 
smart_man:
1.同時に2つ以上の注文を出すにはどうしたらよいですか?
2.注文がTPまたはSLによってクローズされたかどうかを知り、このイベントで何かを呼び出すにはどうすればよいですか?
3.Expert Advisorによる実際の取引では、どのような問題が発生する可能性があるのでしょうか?自分のTP、SL、Pendingなどがサーバーで実行されないことがあるのですか?そんなとき、あなたならどうしますか?トレードログを確実に保存する場所はどこですか(グローバル変数、ターミナル、ファイルなど)?

回答の一部をご紹介します。https://www.mql5.com/ru/forum/131859