初学者的问题 MQL4 MT4 MetaTrader 4 - 页 58

 
我想自己学习如何写代码...所以我想我要征求一些建议。我想,也许有人可以给我一个样本......谢谢!"。
 
Stafort:
我想自己学习如何写代码...所以我想我要征求一些建议。我想也许有人可以给我一个样本......谢谢你
在这里,你有很多样本,挑选出最适合的,它有适合你需要的编辑。如果你不能,你可以随时在这个论坛上提出问题,并得到答案。
 
客户抱怨说,即使专家顾问被从图表中删除,也一直在开交易。这不可能是事实,对吗?
而如果你不把它从图表中删除,只是关闭专家顾问窗口,会不会有效果?
谢谢你。
 
Vladimir Tkach:
客户抱怨说,即使专家顾问已经从图表中删除,也一直在开交易。这不可能是事实,对吗?
而如果你不把它从图表中删除,只是关闭EA窗口,会不会有效果?
谢谢你。

如果删除并正确书写,应该不会。用去初始化代码卸载 - 1.如果专家顾问锁定了...我们必须处理好这个问题...

如果您关闭EA窗口,EA将被卸下去初始化代码 - 4。

原因_chartclose

4

图表已关闭


https://www.mql5.com/ru/docs/constants/namedconstants/uninit

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MONTE_CRISTO:
嗯,这是正确的,在我的记忆中,那里有metaquote的报价,而且Tickstory的质量很好。
如果你用MT5在经纪公司开户,报价会 "不纠结",这是什么问题?我一直没有学会如何准备它们,而用MT5则更容易和更快地输出。
 
Sergey Gritsay:
至少要有一张截图,以了解你要合并的行数
谢尔盖-格里察伊
至少要有一张截图,以了解你想合并哪些行。
谢尔盖-格里察伊
至少要有一张截图,以了解你想组合什么样的线条。谢谢你的答复我想在MT4上将两个上层工具行连接成一个。
 

变量dT的红色可能意味着什么?


 
Andrei:

变量dT的红色可能意味着什么?


被声明为一个 "外部 "输入变量
 
伙计们,一个提示。测试器给出错误:2017.02.08 18:24:43.751 TestGenerator:不匹配的数据错误(2016.07.27 19:30的低值1.09860没有从最低时间段达到,低价1.09880不匹配。)
这意味着什么,如何才能解决这个问题?我做错了什么?
double Margin_Percent=AccountFreeMargin()*Percent/100; //Используемые средства для открытия ордеров
double Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Определение общего количества лотов
double Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,1); //Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,2);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,3);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime New_Time=TimeCurrent();// Время текущего бара
   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   total=OrdersTotal();// Опредление количства ордеров
   if(total<1)
     {
      //--- нет открытых ордеров
      if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
         //Проверка на наличие денежных средств для открытия минимального лота
        {
         Print("Не хватает средств. Свободные средства = ",AccountFreeMargin());
         return;
        }
      if(Time[0]==New_Time) // Сравниваем время
        {
         New_Bar=true;      // Поймался новый бар
         if(New_Bar==false)    // Если бар не новый..
            return;            // ..то уходим  
        }
      //Определение количества лотов
      if(Lots>Lots_Volume)
         Lots=Lots_Volume;
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      return;
      //--- условие для открытия длинной позиции (BUY)
      if(CurrentPSAR<iOpen(NULL,0,1) &&
         ((MacdPrevious1>0 && MacdPrevious2<0) ||
         (MacdCurrent>0 && MacdPrevious1<0) ||
         (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
         (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
         if(ticket>0)//проверка отрытия позиции
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY ордер открыт : ",OrderOpenPrice());
            else Print("Ошибка открытия ордера BUY : ",GetLastError());
            return;
           }
        }
      //--- условие для открытия короткой позиции (SELL)
      if(CurrentPSAR>iOpen(NULL,0,1) &&
         ((MacdCurrent<0 && MacdPrevious1>0) ||
         (MacdPrevious1<0 && MacdPrevious2>0) ||
         (MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
         (MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
         if(ticket>0)//проверка открытия позиции
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL ордер открыт : ",OrderOpenPrice());
            else Print("Ошибка открытия ордера SELL : ",GetLastError());
            return;
           }
        }
      return; //--- выход из блока "нет открытых ордеров"
     }
//--- важно правильно войти в рынок, но более важно правильно из него выйти  
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
         OrderSymbol()==Symbol()) // проверка символа ордера
        {
         //--- длинная позиция открыта
         if(OrderType()==OP_BUY)
           {
            //--- должен быть закрыт?
            if(CurrentPSAR>iOpen(NULL,0,1) &&
               ((MacdCurrent<0 && MacdPrevious1>0) ||
               (MacdPrevious1<0 && MacdPrevious2>0) ||
               (MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
               (MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
              {
               //--- закрытие ордера и выход
               if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                 {
                  Print("Ордер закрыт");
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
                  if(ticket>0)//проверка открытия позиции
                    {
                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                        Print("SELL ордер открыт : ",OrderOpenPrice());
                     else Print("Ошибка открытия ордера SELL : ",GetLastError());
                     return;
                    }
                 }
              else Print("Ошибка закрытия ордера ",GetLastError());

              }
            //------------------Модификация ордера по СтопЛоссу
            else if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
              {
               if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
                  Print("Цена Stop Loss ордера успешно модифицирована.");
               else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
               return;
              }
            return;
           }
         // идём на короткую позицию
         else if(OrderType()==OP_SELL)
           {
            //--- должен быть закрыт?
            if(CurrentPSAR<iOpen(NULL,0,1) &&
               ((MacdPrevious1>0 && MacdPrevious2<0) ||
               (MacdCurrent>0 && MacdPrevious1<0) ||
               (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
               (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
              {
               //--- закрытие ордера и выход
               if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                 {
                  Print("Ордер закрыт");
                  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
                  if(ticket>0)//проверка отрытия позиции
                    {
                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                        Print("BUY ордер открыт : ",OrderOpenPrice());
                     else Print("Ошибка открытия ордера BUY : ",GetLastError());
                     return;
                    }
                 }
               else Print("Ошибка закрытия ордера ",GetLastError());
              }
            //-----------------Модификация ордера по СтопЛоссу            
            else if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
              {
               if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
                  Print("Цена Stop Loss ордера успешно модифицирована.");
               else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
               return;
              }
           }
        }
     }
//------
  }
//-------------------------------------------------------------------------------------------------------
 
Michail_David:
伙计们,一个提示。测试器给出错误:2017.02.08 18:24:43.751 TestGenerator:不匹配的数据错误(2016.07.27 19:30的低值1.09860没有从最低时间段达到,低价1.09880不匹配。)
这意味着什么,如何才能解决这个问题?我做错了什么?
是报价的问题,它们的质量很差。