任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 486

 
evillive:

如果你把你的数字108,你最多可以得到151的幂 - 108^151=1.11426138071861e+307

108^152=1.20340229117609e+309对MCL编程来说太多,更不用说108^4096了。

什么样的计算会需要这样的比例?


我正试图综合价格走势分析和Nlp注意力管理,以及大脑的自动驾驶:)
 
alex12:
我正试图将价格走势分析和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下存在,那么就进入下一个条件。
 
Vladon:
如果有一个命令,即在数字和-1下存在,那么就进入下一个条件。

它总是能找到一个数字为零的订单(也就是i-1)。多么疯狂的方法来确定 "下一个 "订单,真正的误导......。
 
谢谢你的解释。
 
evillive:

它总是会找到一个数字为零的订单(也就是i-1)。这是一些确定 "下一个 "订单的疯狂方法,这确实是一种误导......


如果没有订单,那么通过这种设计。

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;
 

你好,程序员先生,我有一个问题,我不能学习代码的一部分,以关闭帐户余额 的百分比。 我需要,将关闭一个特定的订单和存款余额的计算百分比,建议我做错了什么?


外置双倍百分比 = 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()
//+-----------------------------------------------------------------

 
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);

怎么样?

和这个。

if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent;

将永远不会实现。

因此。

if(stop<=AccountBalance())

将始终与每个订单合作。

结论:一切都错了。

你的功能需要考虑清楚,我没有一个快速的答案。

但至少开始时是这样的。

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(OrderProfit()>=AccountBalance()/100*Percent)

{
if(OrderType() == OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
if(OrderType() == OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())
}//if(ostop==AccountBalance()/100*Percent)
}//if (OrderSymbol() == Symbol() )
}//if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//for(int i = OrdersTotal()-1; i>=0; i--)
return;
}//void OnStart()
//+-----------------------------------------------------------------
 
Vladon:


如果在这样的结构中没有订单。

它将不会进入下一个条件。

因为没有顺序和-1(在我们的例子中=0)。

当然,这样写并不方便,也不清楚为什么要这样写。

而不是,比如说,像这样。


我在读的时候,也想过为什么不直接把i=0,似乎更简单更清楚。

这是整个脚本的代码,也许作者把i=1而不是i=0是有原因的,只是我对它的了解不够,可能根本看不出来,而我需要了解运作的机制,以免以后提出问题

// 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)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: 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)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }
//-------------------------------------------------------------- 10 --
   Alert ("Скрипт закончил работу -----------------------------");
   return;                                      // Выход из start()
  }