for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
を選択すると、次の条件には進みません。
というのは、順序と-1(ここでは=0)が存在しないからです。
もちろん、このように書くと不便だし、なぜこうでなければならないのか、その理由も不明である。
とはならず、例えばこのように。
for(int i=0; i<OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий
{
if (OrderSymbol()!= Symb) continue;
// closeorder.mq4// Предназначен для использования в качестве примера в учебнике MQL4.//--------------------------------------------------------------- 1 --int start() // Спец.функция start
{
string Symb=Symbol(); // Финанс. инструментdouble Dist=1000000.0; // Предустановкаint Real_Order=-1; // Пока рыночных нетdouble Win_Price=WindowPriceOnDropped(); // Здесь брошен скрипт//--------------------------------------------------------------- 2 --for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров://------------------------------------------------------ 3 --if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.int Tip=OrderType(); // Тип ордераif (Tip>1) continue; // Отложенный ордер //------------------------------------------------------ 4 --double Price=OrderOpenPrice(); // Цена ордераif (NormalizeDouble(MathAbs(Price-Win_Price),Digits)< //ВыборNormalizeDouble(Dist,Digits)) // самого близкого орд
{
Dist=MathAbs(Price-Win_Price); // Новое значение
Real_Order=Tip; // Есть рыночный ордерint Ticket=OrderTicket(); // Номер ордераdouble Lot=OrderLots(); // Количество лотов
}
//------------------------------------------------------ 5 --
} //Конец анализа ордера
} //Конец перебора орд.//--------------------------------------------------------------- 6 --while(true) // Цикл закрытия орд.
{
if (Real_Order==-1) // Если рыночных нет
{
Alert("По ",Symb," рыночных ордеров нет");
break; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch(Real_Order) // По типу ордера
{
case0: double Price_Cls=Bid; // Ордер Buystring Text="Buy "; // Текст для Buybreak; // Из switchcase1: Price_Cls=Ask; // Ордер Sell
Text="Sell "; // Текст для Sell
}
Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера//--------------------------------------------------------- 8 --if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер ",Text," ",Ticket);
break; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеcontinue; // На след. итерациюcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеcontinue; // На след. итерациюcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеRefreshRates(); // Обновим данныеcontinue; // На след. итерацию
}
switch(Error) // Критические ошибки
{
case2 : Alert("Общая ошибка.");
break; // Выход из switchcase5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switchcase64: Alert("Счет заблокирован.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Другие варианты
}
break; // Выход из цикла закр
}
//-------------------------------------------------------------- 10 --Alert ("Скрипт закончил работу -----------------------------");
return; // Выход из start()
}
108という数をとると、最大で151の151乗になる - 108^151=1.11426138071861e+307
108^152=1.20340229117609e+309 は 108^4096 はともかく、MCL プログラミングには多すぎる。
どのような計算をすると、このようなスケールが必要になるのでしょうか?
値動き解析とnlp-アテンション・マネジメントを合成しようとしているのですが、脳が自動操縦になっているんです :)
MQL4の勉強を始めたのですが、注文がどのように選択されるのかが理解できません。
をチュートリアルよりご覧ください。
for(int i=1; i<=OrdersTotal(); i++) // オーダーループ
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // if
{
if (OrderSymbol()!= Symb) continue;
私の理解では、i<=注文数 である限り、i=1 である。
i-1の位置で選択されたオーダー(つまりオーダー#0)が存在する場合
シンボルと比較
次にiに1(i++)を加え、新たな反復を開始する
I don't understand the comment// If there is next order (what do you mean: next in position or this order that being currently selected?).
ロシア語で説明してください。
オーダーがある場合、つまりand-1という番号の下に存在する場合は、次の条件に進みます。
常に番号0(i-1)のオーダーを見つけることができる。次の」注文を決めるのに、なんという狂った方法だろう、本当に誤解を招く...。
常にゼロの番号(i-1である)を持つオーダーを見つけることができる。これは、「次」の順番を決めるという、なんとも乱暴な方法で、まさに誤解を招きかねない...。
注文がなければ、このデザインで。
を選択すると、次の条件には進みません。
というのは、順序と-1(ここでは=0)が存在しないからです。
もちろん、このように書くと不便だし、なぜこうでなければならないのか、その理由も不明である。
とはならず、例えばこのように。
こんにちは氏プログラマは、私は質問を持って、私は口座残高の 割合を閉じるには、コードの一部を学ぶことができません。それは、パーセンテージではなく、一度にすべての、市場にあるすべての注文を閉じます。 私はそれが特定の順序と預金残高の計算割合を閉じる必要があります。
extern double Percent = 2.0;
extern int Slippage = 2;
double stop;
void OnStart()
{
if (Digits == 3 || Digits == 5)
{
Slippage *= 10;
} }.
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent;
if(stop<=AccountBalance())であれば、stopは100%になります。
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())項)
}////(ostop==AccountBalance()/100*Percent)
}///// (OrderSymbol() == Symbol() )
}// (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}/// for(int i = OrdersTotal()-1; i>=0; i--)
return;
}///void OnStart()
//+-----------------------------------------------------------------.
どうしたんですか
とこれです。
が満たされることはない。
ということです。
は、どのような注文にも必ず対応します。
結論:すべてが間違っている。
あなたの機能はよく考える必要があります、私はすぐに答えを持っていません。
でも、少なくとも最初はこんな感じなんですよ。
このような構成で注文がない場合。
を選択すると、次の条件には進みません。
というのは、順序と-1(ここでは=0)が存在しないからです。
もちろん、このように書くと不便だし、なぜこうでなければならないのか、その理由も不明である。
とはならず、例えばこんな感じです。
私も読んでいて、なぜi=0としないのかと思いましたが、その方がシンプルでわかりやすいようです。
このスクリプトのコード全体は以下の通りです。もしかしたら、作者がi=0ではなくi=1としたのには、それなりの理由があるかもしれません。