datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магикint start()
{
int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
int af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // Шаг 1: OrderSelect Выбираем ордер (SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == "EURUSD") && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ EURUSD отсутствует,И если ордер присутствует , и ни один из ордеров НЕ содержит магикномер, то выходим из цикла.( выходим -значит откр. позицию)
(если какое-либо условие из двух указанных не совпадает, то выходим)
}
if ((Close[0]>High[1]))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}
if ((Close[0]<Low[1]))
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}
return(0);
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
[in] Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
Убрать из советника второй индикатор заменить другим,изменить условие открытие ордера .Условие сделки покупка: НМА линия вверх второй индикатор столбик гистограмы выше нуля (второй индикатор пересечение нуля точка входа) по закрытой свече если нма и второй индикатор не изменили показания совершается покупка для продаже наоборот.Изменить...
datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магикint start()
{
int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // OrderSelect возвращает тип bool// Шаг 1: OrderSelect Выбираем ордер //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ Выбранного ордера
//равен EURUSD (заменено на текущий инструмент открытого окна) ,
// И если магик Выбранного ордера равен магик то выходим из функции Онстарт.// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров.
}
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента.
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber); // так же здесь цены аск и бид тоже для текущего инструмента
}
if ((Close[0]<Low[1]))
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber); // и поинт кстати тоже.
}
return(0);
}
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
正しいコードです。注文のコメントが抜けていますし、コードにマジコンが計上されていません。冒頭の警告の中に、Implicit type conversion of number to string(数値から文字列への暗黙の型変換)と記されています!!!
//+------------------------------------------------------------------+//| forumtest.mq4 |//| Copyright 2019, MetaQuotes Software Corp. |//| https://qstr.ru |//+------------------------------------------------------------------+#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://qstr.ru"#property version"1.00"#property strictdatetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)externint P=1; //Таймфреймexternint MagicNumber = 100500; // Установили магик//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---int send;
double SL=200;
double TP=200;
double Lots=1;
for(int i = OrdersTotal(); i >=0; i--) // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES); // OrderSelect возвращает тип bool // Шаг 1: OrderSelect Выбираем ордер //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return; // Шаг 2: Если символ Выбранного ордера //равен EURUSD (заменено на текущий инструмент открытого окна) ,// И если магик Выбранного ордера равен магик то выходим из функции Онстарт.// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров.
}
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента.
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen); // так же здесь цены аск и бид тоже для текущего инструмента
}
if ((Close[0]<Low[1]))
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,"My order",MagicNumber,0,clrGreen); // и поинт кстати тоже.
}
return;
}
//+------------------------------------------------------------------+
私の理解では、定期的に空き状況を確認するようなものだと思います。(EURUSDがあるか、指定のMagicの注文があるか)いずれかの条件が欠けていれば、ポジションを建てる。両方の条件が揃った場合のみ、ポジションを建てる。
そして、ステップ2で問われる。手動で開いた注文が1つあるとします。そうすると、最初の条件(同じシンボルを持っている)を満たし、2番目の条件は満たさないことになります。このオーダーにはマジックが含まれていないからです。そして、もし条件の1つが一致しなければ、コードは注文を開くはずです。これは、まさにこのコードの通りです。しかし、次のティックでは、3次、4次、5次と開いていく......。
なぜ3つ目の注文を開けるのか?
しかし、両方の条件を満たすオーダーが合計で2つあるのです。オープンではなく、チェック(return(0)への変更)があるはずです。オープニングではありません。
皆さん、おやすみなさい。mql5で、チャート上に線を引き(画像添付)、この線のすべての座標をファイルに記録するコードを書けるかどうか教えてください。線を引いてそこに座標を記入する場合は、線の簡単なトレースが必要です。
全てはドキュメントに 書かれています。
全てはドキュメントに 書かれています。
ありがとうございます。もしかしたら、これを作るのを手伝ってくれるかもしれませんね。もちろん、無料で。
ありがとうございます。でも、もしかしたら、こういうものを作るのを手伝ってくれるかもしれませんね。もちろん、タダではありませんよ。
無料ではありません - それはあなたのため です)))
私の理解では、定期的に空き状況を確認するようなものだと思います。(EURUSDがあるか、指定のMagicの注文があるか)いずれかの条件が欠けていれば、ポジションを建てる。その両方の条件を満たした場合のみ、ポジションを建てるのです。
そして、ステップ2で問われる。手動で開いた注文が1つあるとします。そうすると、最初の条件(同じシンボルを持っている)を満たし、2番目の条件は満たさないことになります。このオーダーにはマジックが含まれていないからです。そして、もし条件の1つが一致しなければ、コードは注文を開くはずです。これは、まさにこのコードの通りです。しかし、次のティックでは、3次、4次、5次と開いていく......。
なぜ3つ目の注文を開けるのか?
しかし、両方の条件を満たすオーダーが合計で2つあるのです。オープンではなく、チェック(return(0)への変更)があるはずです。が、オープニングは別。
== - 等しい場合 != - 等しくない場合。Continue - ループの反復を終了し、新しいループの反復を開始する。Breaking - サイクルの終了とサイクルに続く次の演算子への移行、return - 関数の終了、この場合は Onstart と新しい tick の待ち受け。また、自分のマジックを使った注文が開いている場合は、機能を終了し、新しいティックを待つために離れる必要があります。
質問、現在のウィンドウで注文を開きたい場合、なぜツールを明示的に指定する必要があるのでしょうか、それとも他のツールのウィンドウから注文を開きたいのでしょうか?また、何件注文を出したいのかも不明です。あなたのコードによると、1つの注文しか開くことができず、それが閉じられた後、2つ目の注文が開かれることになります。マジシャンとオープンウィンドウツールが1つずつありますね。また、注文の開始条件は、ユーロバックスではなく、カレント商品に対してチェックされます。
== - 等しい場合 != - 等しくない場合。Kontinue - ループの反復を終了し、新しいループの反復を開始します。Break - ループを終了し、ループに続く次の演算子に進みます。return - 関数(この場合は Onstart)を終了し、新しい tick を待ちます。また、自分のマジックを使った注文が開いている場合は、機能を終了し、新しいティックを待つために離れる必要があります。
質問、現在のウィンドウで注文を開きたい場合、なぜツールを明示的に指定する必要があるのでしょうか、それとも他のツールのウィンドウから注文を開きたいのでしょうか?また、何件注文を出したいのかも不明です。あなたのコードによると、1つの注文しか開くことができず、それが閉じられた後、2つ目の注文が開かれることになります。マジシャンとオープンウィンドウツールが1つずつありますね。また、注文の開始条件は、ユーロバックスではなく、カレント商品に対してチェックされます。
- はい、現在のウィンドウで開きたいのです。
- 1オーダーです。前の注文が終了するまで、次の注文は開始されません。
"また、注文の 開始条件は、ユーロバックスではなく、カレント商品に対してチェックされます。" - それから?
- はい、現在のウィンドウで開きたいのです。
- 1オーダーです。前の注文が終了するまで、次の注文は開始されません。
"また、注文の 開始条件は、ユーロバックスではなく、現在の商品に対してチェック されます。" - それから?
そして、何を、例えば、あなたが開いているウィンドウではなく、ユーロバックスが、Eurofunt、あなたはそれが真であれば、選択した注文記号をユーロバックスと比較し、ユーロバックスに注文があり、もし我々のマジック、OnStart関数からリターニー、そうでなければ、我々はユーロバックスに注文が設定され、クロズ、ハイ、Asc、入札、これらのインスタンスの入札とAscは異なるため、オープン注文時にはエラーになることがあります。また、Symbol()はカレントウィンドウのシンボルを返すので、エラーは発生しません。
メタエディタからテンプレートを使用することができます。左上に「新規作成」ボタンがあります。OnStart関数はまだ使われていますが、それは正しくなく、OnStartはスクリプトのためのものです。正しいテンプレートです。
正しいコードです。注文のコメントが抜けていますし、コードにマジコンが計上されていません。冒頭の警告の中に、Implicit type conversion of number to string(数値から文字列への暗黙の型変換)と記されています!!!
あなたの例には多くの誤りがあります。
があるはずです。
ここでは価格は正規化されていませんOrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen);
ここで、条件がfalseの場合、なぜOnTick()からの終了が必要なのか、そのロジックが理解できないのです。
おそらく、このままループを続けて、単純に注文の数を計算 すべきなのでしょう。
あなたの例はロジックが非常にシンプルなので、他のタスクのために修正するのは難しいのでは......。を付けたいのだろう。