初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1210

 
MQL_User:

一見するとプログラムからチャートを再描画するのが当たり前のように思えるので、こんな問題に遭遇するとは思いもしませんでした。そう考えると、ChartRedraw()関数の 目的が不明です...。

インジケーター用ではなく、グラフィカルなオブジェクトのプロパティに加えられた変更を表示するためのものです。

インジケータにティックを送信する必要があります - その後、インジケータは再描画されます。まあ、つまり、新しいティックでやるべきことをやるということです。

また、新しいティックを送るには、それを待つか、PCM --> Refresh でチャートをリフレッシュするか、これもオプションではありませんが、現在のチャートにそのようなパラメータを付けてChartSetSymbolPeriod() 関数を使用する必要があります。

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
 


こんにちは、助けてください、私は指値注文を開くスクリプトを書きました、しかし、市場価格で。取引サーバーのリターンコードは10009で、GetLastError()は0を返しますが、何も動作していません。

void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =Ask;                                    // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
例えば request.price が put: Ask-Point()*30 では設定されず、価格の正規化でも何も得られない。
 
アルテムさん、上の質問に対して、面白い意見ですね。 勉強になりました。
 
Artyom Trishkin:

これはインジケーターのためではなく、グラフィカルなオブジェクトのプロパティに加えられた変更を表示するためのものです。

インジケータにティックを送信する必要があります - その後、インジケータは再描画されます。つまり、新しいティックでやるべきことをやるのです。

新しいティックを送るには、それを待つか、PKM --> Refresh を使ってチャートをリフレッシュするか、これもオプションではありませんが、現在のチャートに対してこれらのパラメータを使ってChartSetSymbolPeriod() を使用する必要があります。

アルテム ありがとうございます。

すべてうまくいっている。:)

 
ビジュアルテスト 中に、EAで使用している全てのインジケータのチャート上への表示を無効にする方法をご存知の方はいらっしゃいますか?
 
Сергей Таболин:
ビジュアルテスト 中にEAで使用されているすべてのインジケータをチャート上に表示しないようにする方法をご存知の方はいらっしゃいますか?

TesterHideIndicators(true)。

 

別のタイムフレームで動作する準備が整っていないインジケータを見分けるには?

履歴は、隣接する時間軸のページングがされていない(構築されていない)。このインジケータはM15で動作しますが、H1(M15のチャートの上)を見る必要があり、切り替えると - チャートは空っぽです。数秒後にリフレッシュすると - ビューティ、すべてのバッファがレンダリングされています。

インジケーターが別のタイムフレームで履歴を確認し、表示されるまで計算を保持するようにするにはどうすればよいですか?

 
Igor Zakharov:

TesterHideIndicators(true)。

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

 

他の時間軸のATP値が取得できない。

ATR_handle=iATR(_Symbol,ATR_TF,ATR_Period);
CopyBuffer(ATR_handle,0,time[i],1,ATR);

現在のタイムフレームから-動作。古いタイムフレームから-常に0

 

先物では、テクニカルチャート分析のために、どのように連続した契約を作成するのですか?

理由: