int i,orders_total=OrdersTotal();
bool order_on_last_bar=false;
if(orders_total>0) //если есть ордера
{
for(i=orders_total-1;i>=0;i--) //перебираем их все
{
OrderSelect(i,SELECT_BY_POS);
if(iBarShift(OrderOpenTime())==0) //если номер бара, соответствующего сремени открытия, равен 0
order_on_last_bar=true; //фиксируем этот факт
}
}
if(order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
//делаем то что нам нужно
}
int start()
{
int
Total, // Количество ордеров в окне
...
// Учёт ордеров
Symb=Symbol(); // Название фин.инстр.
Total=0; // Количество ордеровfor(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:if (OrderSymbol()!=Symb)continue; // Не наш фин. инструмif (OrderType()>1) // Попался отложенный
{
Alert("Обнаружен отложенный ордер. Эксперт не работает.");
return; // Выход из start()
}
Total++; // Счётчик рыночн. ордif (Total>1) // Не более одного орд
{
Alert("Несколько рыночных ордеров. Эксперт не работает.");
return; // Выход из start()
}
Ticket=OrderTicket(); // Номер выбранн. орд.
Tip =OrderType(); // Тип выбранного орд.
Price =OrderOpenPrice(); // Цена выбранн. орд.
SL =OrderStopLoss(); // SL выбранного орд.
TP =OrderTakeProfit(); // TP выбранного орд.
Lot =OrderLots(); // Количество лотов
}
}
スクリプトはEAと見分けがつかない...。
EAのようにパラメータ付きのダイアログを表示するために、スクリプトで#property show_inputsが使われていることがありますが(当たり前のようにあります)、違いがわかりにくいですね......。
アルゴリズムを提案してもらえますか?高値の時間枠の高値と安値の時間枠の安値の時間を見つける必要があります。
アルゴリズムを提案してもらえますか?低い時間枠の中で高い時間枠の高値と安値の時間を見つける必要があります。
覚えておくか、すぐにi - 見つかったインデックスを使用します。
また、iTime(NULL,TF2,i)は時刻となる。
朝まで持ちこたえられなかった。少しはマシになったが、オーダブルーム配置は避けられなかった。必要な条件で1回の注文を設定するにはどうしたらよいですか?注文履歴の分析しかないのですが、どうすればいいのでしょうか、他に何かいい方法はありますか?
このように
以前にも質問したことがあるのですが、今また必要なのは、ポジションを建てるための最大ボリュームを 計算することです。このように書いています。
しかし、Max_lotsは常にゼロに等しい...。このようなことを計算するのは、もっと有能な人がいるのでは?
このように
iBarShift関数の 値をすべて埋めましたが(以前コンパイルでエラーになりました)、int iはすでに上で宣言されています。 実験のためにこのリプレイを削除してjに置き換えようとしましたが、うまくいきませんでした - いくつかのバーで複数の注文のオープン/クローズが発生しています。以下、開封条件付きのコードです。もしかしたら、何か失敗しているかもしれません。他に何ができるのか?
iBarShift関数の値をすべて埋めましたが(以前コンパイルでエラーになりました)、int iはすでに上で宣言されています。このリプレイを削除して、きれいな実験のためにjに置き換えようとしましたが、うまくいきませんでした - いくつかのバーで複数の注文のオープン/クローズがありました。以下、開封条件付きのコードです。もしかしたら、何か失敗しているかもしれません。他に何ができるのか?
1.Total変数とは何ですか?その値はどこに代入されていますか?
2.2番目のif(Total=0 if()の前にelseを置いた方が良い。
1.Total変数とは何ですか?その値はどこに代入されていますか?
これは、記事「Simple Expert」(https://book.mql4.com/ru/samples/expert)の例に基づいています。
alsu:
2.2番目の if(Total==0) の前に、else if(.
alsu さん、 押し付けがましくて申し訳ないですが、どうしても解決したい(終結させたい)のです。
どうってことない
単純なEAから/* */コードの一部をコミットして、Totalをorders_totalに置き換えてみて ください - 私たち自身が宣言した変数です。