[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 832

 
Vinin:

下一次会有什么变化?
同样的事情。一个头寸被关闭--一个挂单被设置,等等。有一个函数可以返回最后的值(如OrderCloseTime())。每一个刻度,我都会得到最后一个平仓的时间值(比如说,1号仓)。当用一个新的tick关闭下一个头寸(头寸#2)时,我得到了关闭这个(#2)头寸的时间。OrderCloseTime()的值相对于之前的值有变化。以此类推。我不关心变量如何或有多大变化。对我来说,重要的是变量发生了变化这一事实本身。这就像一个逻辑运算: 如果最后一个平仓的OrderCloseTime()大于倒数第二个平仓的OrderCloseTime(),那么我们应该做BLA-BLA-BLA。另外--如果最后一个平仓头寸的OrderClosePrice()不等于倒数第二个头寸的OrderClosePrice(),则进行BLA-BLA-BLA。或者,也许不可能进行这样的比较?
 
问题就在这里。例如,假设我们的EA在指标(例如,我采取CCI)从下到上越过某个水平(红线)时显示买入信号,而当它分别向下时显示卖出信号。我们应该如何使订单在条形图A的形成过程中只打开一次?假设指标在条形图A的形成过程中多次向下和向上穿越水平线(红线)。正如我已经提到的,我们应该使一个订单只被打开一次。

我们需要的是,在D条(图表上的情况2)上收到的卖出信号不关闭 A条上的订单,并且不受任何影响

也就是说,订单打开后,不受专家顾问的控制。


预先感谢你。

 

请帮助我将一段Sequent Demarque代码附加到EAhttps://www.mql5.com/ru/code/7372

并不像这样工作。

num=0。

for(i=bars; i>=0; i--)
{
如果((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 ) ){
num++。


如果((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
购买.......

如果(num==9)
close........

 
Vinin:


1.计算第一种类型的订单数量

2.计算第二类订单的数量

3.比较结果


亲爱的维宁。非常感谢您!
 
Forrim:
问题就在这里。让我们假设EA中的买入信号是在指标(例如,我采取CCI)从下到上越过某个水平(红线)时产生的,而卖出信号则分别在从上到下时产生。我们应该如何使订单在条形图A的形成过程中只打开一次?假设指标在条形图A的形成过程中多次向下和向上穿越水平线(红线)。正如我已经提到的,我们应该使一个订单只被打开一次。 。

这就要求在D条(图表中的情况2)收到卖出信号时,A条上的订单关闭,也不应受到任何影响

也就是说,订单打开后,不受EA的控制。


事先非常感谢。

实际上,CCI的跳动幅度非常大,我们最好在酒吧关门和新酒吧开业后再去检查。

如果我们想检查一个蜡烛的开盘时间是否不同(如果是,订单打开)或相同(=>没有订单打开),那么在每个交叉点,我们应该在全局变量 中存储开盘时间。

 
Forrim:
问题就在这里。例如,假设我们的EA在指标(例如,我采取CCI)从下到上越过某个水平(红线)时显示买入信号,而当它分别向下时显示卖出信号。我们应该如何使订单在条形图A的形成过程中只打开一次?假设指标在条形图A的形成过程中多次向下和向上穿越水平线(红线)。正如我已经提到的,我们应该使订单只被打开一次。

我们需要的是,在D条(图表上的情况2)上收到的卖出信号不关闭 A条上的订单,并且不受任何影响

也就是说,订单打开后,不受专家顾问的控制。


预先感谢你。

如果这种类型的头寸已经打开,就不要再打开了。
 
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   =20;      // SL для открываемого ордера
extern double TakeProfit =20;      // ТР для открываемого ордера
extern double Step_Sar=0.02;       // Шаг Sar
extern double Maximum_Sar=0.2;     // Максимум Sar
extern double Lot=0.01;            // Жестко заданное колич. лотов
bool Work=true;                    // Эксперт будет работать.
//--------------------------------------------------------------- 2 --
int start()
  { 
   int   
   Total,                           // Количество ордеров в окне 

   Ticket;                          // Номер ордера
   
   double
   Sar_1 ,                          // Значен. Sar текущее
   Sar_0 ,                          // Значение Sar предыдущей свечки      
   Price,                           // Цена ордера
   SL,                              // SL ордера 
   TP;                              // TP ордера
   
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
   
//--------------------------------------------------------------- 3 --   
   // Учёт ордеров   

   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol())continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>1)                           // Не более одного орд
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }

   
     
       
        
    
         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
         }
         }
   
//--------------------------------------------------------------- 6 --
   // Торговые критерии
   Sar_1=iSAR(NULL, 0, 0.02, 0.2, 1);           // Sar_1
   Sar_0=iSAR(NULL, 0, 0.02, 0.2, 0);           // Sar_0
 
   if (Sar_0 > Price && Sar_1 < Price)          // если Sar меняет положение
     {
      Opn_B=true;                               // Критерий откр. Buy             
     }  
   if (Sar_0 < Price && Sar_1 > Price)          // если Sar меняет положение
     {                                          
      Opn_S=true;                               // Критерий откр. Sell                                   
     }   
//--------------------------------------------------------------- 7 --
  
     {
      if (Opn_B==true)         
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Bid;                 // Вычисление SL откр.
         TP=20*Bid;                           // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,SL,TP);//Открытие Buy                         
        }
        if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                                   
         return;                                // Выход из start()
        
        
      if (Opn_S==true)                          // критерий откр. Sell
      
        {                                       // критерий откр. Sell
         RefreshRates();                        // Обновление данных
         SL=(20+Ask-Bid)*Ask;                 // Вычисление SL откр.
         TP=20*Ask;                           // Вычисление TP откр.
         Alert("Попытка открыть Sell. Ожидание ответа..");
         Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,SL,TP);//Открытие Sel
         
         return;                                // Выход из start()
        }
        
      if (Fun_Error(GetLastError())==1)      // Обработка ошибок
                      
         return;                                // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)                        // Ф-ия обработ ошибок
  {
   switch(Error)
     {                                          // Преодолимые ошибки            
      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 135:Alert("Цена изменилась. Пробуем ещё раз..");
         RefreshRates();                        // Обновим данные
         return(1);                             // Выход из функции
      case 136:Alert("Нет цен. Ждём новый тик..");
         while(RefreshRates()==false)           // До нового тика
            Sleep(1);                           // Задержка в цикле
         return(1);                             // Выход из функции
      case 137:Alert("Брокер занят. Пробуем ещё раз..");
         Sleep(3000);                           // Простое решение
         return(1);                             // Выход из функции
      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
         Sleep(500);                            // Простое решение
         return(1);                             // Выход из функции
         // Критические ошибки
      case  2: Alert("Общая ошибка.");
         return(0);                             // Выход из функции
      case  5: Alert("Старая версия терминала.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 64: Alert("Счет заблокирован.");
         Work=false;                            // Больше не работать
         return(0);                             // Выход из функции
      case 133:Alert("Торговля запрещена.");
         return(0);                             // Выход из функции
      case 134:Alert("Недостаточно денег для совершения операции.");
         return(0);                             // Выход из функции
      default: Alert("Возникла ошибка ",Error); // Другие варианты   
         return(0);                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --

初级EA,当抛物线SAR指标相对于价格图发生变化时应开仓,在M15上工作,开仓的SL和TP总是不变的。

该EA比较了当前和之前蜡烛图的指标位置。

在编译过程中没有任何错误或bug,在测试中标签 "结果""图表""报告 "是空的,在日志中是这样:"图片"。

我已经是第二天编码了,我以前从来没有编码过,我读了我的mql书并在网上搜索了我的问题。我陷入了僵局,如果你能帮助我,请帮帮我。


 

T.H.C. 试试这个




附加的文件:
0000001_1.mq4  3 kb
 
Techno:

T.H.C. 试试这个。




非常感谢你,我没有想到会有这么快的反应,而且代码有这么大的变化。

请提供除基础Mql之外的编程书籍的建议

 
T.H.C.:

非常感谢你,我没有想到代码的速度和变化如此之大。

除了基本的mql之外,请提供更多关于编程的书籍。

我只读过基础篇,你需要更多的练习才能很好地掌握。