Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
voidOnStart()
{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);
}
一見するとプログラムからチャートを再描画するのが当たり前のように思えるので、こんな問題に遭遇するとは思いもしませんでした。そう考えると、ChartRedraw()関数の 目的が不明です...。
インジケーター用ではなく、グラフィカルなオブジェクトのプロパティに加えられた変更を表示するためのものです。
インジケータにティックを送信する必要があります - その後、インジケータは再描画されます。まあ、つまり、新しいティックでやるべきことをやるということです。
また、新しいティックを送るには、それを待つか、PCM --> Refresh でチャートをリフレッシュするか、これもオプションではありませんが、現在のチャートにそのようなパラメータを付けてChartSetSymbolPeriod() 関数を使用する必要があります。
例えば request.price が put: Ask-Point()*30 では設定されず、価格の正規化でも何も得られない。こんにちは、助けてください、私は指値注文を開くスクリプトを書きました、しかし、市場価格で。取引サーバーのリターンコードは10009で、GetLastError()は0を返しますが、何も動作していません。
これはインジケーターのためではなく、グラフィカルなオブジェクトのプロパティに加えられた変更を表示するためのものです。
インジケータにティックを送信する必要があります - その後、インジケータは再描画されます。つまり、新しいティックでやるべきことをやるのです。
新しいティックを送るには、それを待つか、PKM --> Refresh を使ってチャートをリフレッシュするか、これもオプションではありませんが、現在のチャートに対してこれらのパラメータを使ってChartSetSymbolPeriod() を使用する必要があります。
アルテム ありがとうございます。
すべてうまくいっている。:)
ビジュアルテスト 中にEAで使用されているすべてのインジケータをチャート上に表示しないようにする方法をご存知の方はいらっしゃいますか?
TesterHideIndicators(true)。
別のタイムフレームで動作する準備が整っていないインジケータを見分けるには?
履歴は、隣接する時間軸のページングがされていない(構築されていない)。このインジケータはM15で動作しますが、H1(M15のチャートの上)を見る必要があり、切り替えると - チャートは空っぽです。数秒後にリフレッシュすると - ビューティ、すべてのバッファがレンダリングされています。
インジケーターが別のタイムフレームで履歴を確認し、表示されるまで計算を保持するようにするにはどうすればよいですか?
TesterHideIndicators(true)。
ありがとうございました ))))
他の時間軸のATP値が取得できない。
現在のタイムフレームから-動作。古いタイムフレームから-常に0
先物では、テクニカルチャート分析のために、どのように連続した契約を作成するのですか?