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的幂 - 108^151=1.11426138071861e+307
108^152=1.20340229117609e+309对MCL编程来说太多,更不用说108^4096了。
什么样的计算会需要这样的比例?
我正试图将价格走势分析和Nlp-注意力管理综合起来,而我的大脑正处于自动驾驶状态:)
我已经开始学习MQL4,但我无法理解如何选择一个订单。
从教程上看。
for(int i=1; i<=OrdersTotal(); i++) // 订单循环
{
如果(OrderSelect(i-1,SELECT_BY_POS)==true)//如果
{
如果(OrderSymbol()!=Symb)继续。
我的理解是:对于i=1,只要i<=订单数量
如果在位置i-1(即订单#0)中选择的订单存在
将其与符号进行比较
然后在i上加1(i++),开始新的迭代
我不明白评论//如果有下一个 订单(你的意思是:下一个位置还是目前正在选择的这个订单?)
请用俄语解释。
如果有一个命令,即在数字和-1下存在,那么就进入下一个条件。
它总是能找到一个数字为零的订单(也就是i-1)。多么疯狂的方法来确定 "下一个 "订单,真正的误导......。
它总是会找到一个数字为零的订单(也就是i-1)。这是一些确定 "下一个 "订单的疯狂方法,这确实是一种误导......
如果没有订单,那么通过这种设计。
它将不会进入下一个条件。
因为没有顺序和-1(在我们的例子中=0)。
当然,这样写并不方便,也不清楚为什么要这样写。
而不是,比如说,以这种方式。
你好,程序员先生,我有一个问题,我不能学习代码的一部分,以关闭帐户余额 的百分比。 我需要,将关闭一个特定的订单和存款余额的计算百分比,建议我做错了什么?
外置双倍百分比 = 2.0;
外置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()
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(stop<=AccountBalance() ).
}////(stop==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=1而不是i=0是有原因的,只是我对它的了解不够,可能根本看不出来,而我需要了解运作的机制,以免以后提出问题