新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1232

 
你能告诉我如何从论坛上删除自己的主题吗?
 
Сергей Таболин:
你能告诉我如何从论坛上删除自己的主题吗?

没有什么。主题是什么?

 
Artyom Trishkin:

没有什么。主题是什么?

https://www.mql5.com/ru/forum/348294

MQ5::Вопрос по свечному индикатору.
MQ5::Вопрос по свечному индикатору.
  • 2020.08.04
  • www.mql5.com
Привет всем! Пока меня окончательно и пожизненно не забанили, хочу успеть задать вопрос по индикатору...
 

谢谢你 ))))

 

你好,我想让函数

//-------------------------------------------------------------------------------
//                      Функция модификации позиции,безуыток, трейлинг-стоп 
//-------------------------------------------------------------------------------+ 
                  
bool Modi_Traili(int select,int pool=MODE_TRADES,ulong magic=-1) 
{ 
//   double Profit_On =OrderProfit();                  // Профит открытой позиции             
   double Price_Open =0;                         // Цена открытой позиции
   string sym =Symbol(),er;
   int i,cnt=0, k=OrdersTotal(),op=-1,mn=-1;
   double Market_Pi=0, oop=0, point=0, pp=0;
   bool loop = false;
//----------------------------------
     if (sym=="") sym=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_TICKET, MODE_TRADES)) {
      if ((OrderSymbol()==sym || sym=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY && (mn<0 || OrderMagicNumber()==mn)){             
          int  Ticket=OrderTicket(); 
            Price_Open = OrderOpenPrice();                                           
            Market_Pi=MarketInfo(OrderSymbol(), MODE_ASK);
            point=MarketInfo(OrderSymbol(), MODE_POINT);
            if (point==0) if (StringFind(sym, "JPY")<0) point=0.0001; else point=0.01;
            if (point==0) if (StringFind(sym, "XAU")<0) point=0.0001; else point=0.001;
             double Sorri=MathRound(MathAbs(Market_Pi-Price_Open)/point);   
              Print("Ticket==",Ticket,"Sorri = ",Sorri,"Price_Open = ",Price_Open,"mi = ",Market_Pi);
             if(Sorri >Deta && OrderProfit()>0)
            {
//            Print("Ticket==",Ticket,"Sorri = ",Sorri,"Price_Open = ",Price_Open,"mi = ",Market_Pi);
 //--------------------------------------------------------------------------------------------------
     while (!loop)                              // Цикл модификации  
     {     
     double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
     double SL=NormalizeDouble(Ask+(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
           Alert ("М-  -  -я ",Ticket,". Ждём ответ..");
          bool Ans=OrderModify(Ticket,Price_Open,SL,TP,0);    //Модифи его!
//--------------------------------------------------------------------------------
   if (Ans==true)                      // Получилось :)
              {
               Alert ("Ордер ",Ticket,TP," модифицирован:)");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --------------------
            int Error=GetLastError();           // Не получилось :(
            switch(Error)                       // Преодолимые ошибки
              {
               case 0  : loop = true; break; 
      
       case 4  : er=("Торговый сервер занят");
       case 135: er=("Цена изменилась");
       case 137: er=("Брокер занят");
       case 138: er=("Новые цены");
       case 146: er=("Подсистема торговли занята. Пробуем ещё..");
        Message(er);
         Sleep(2);                         // Простое решение
        RefreshRates();                     // Обновим данные
          continue;
       case 136: er=("Нет цен");
       Message(er);
          while(RefreshRates()==false)        // До нового тика
           Sleep(5);                        // Задержка в цикле
           cnt++; 
           continue;
       
        default:er=StringFormat("Ошибка: %d",Error);             // Другие варианты
        Message(er);
        loop = true;                  // Выход из while
        break;                             // Выход из switch
          }
//--------------------------------------------------------------------------------          
        } // Окончание while
       }
      }   // Окончание if
    
        if (OrderType()==OP_SELL &&(mn<0 || OrderMagicNumber()==mn))
        {
            int Ticket=OrderTicket(); 
            Price_Open = OrderOpenPrice(); 
            Market_Pi=MarketInfo(OrderSymbol(), MODE_BID);
            point=MarketInfo(OrderSymbol(), MODE_POINT);
            if (point==0) if (StringFind(sym, "JPY")<0) point=0.0001; else point=0.01;
            if (point==0) if (StringFind(sym, "XAU")<0) point=0.0001; else point=0.001;
              double Sorri=MathRound(MathAbs(Price_Open-Market_Pi)/point);    //+MarketInfo(OrderSymbol(), MODE_SPREAD);
             if(Sorri >Deta && OrderProfit()>0)
            {
            Print("So = ",Sorri,"Price_Open = ",Price_Open,"Mi = ",Market_Pi);
            Comment(Ticket);
            while (!loop)                              // Цикл модификации  
     {     
     double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
     double SL=NormalizeDouble(Bid-(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
           Alert ("Мод------я ",Ticket,". Ждём ответ..");
           bool Ans=OrderModify(Ticket,Price_Open,SL,TP,0);    //Модифи его!
//--------------------------------------------------------------------------------
   if (Ans==true)                      // Получилось :)
              {
               Alert ("Ордер ",Ticket,TP," модифицирован:)");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --------------------
             int Error=GetLastError();           // Не получилось :(
            switch(Error)                       // Преодолимые ошибки
              {
               case 0  : loop = true; break; 
      
       case 4  : er=("Торговый сервер занят");
       case 135: er=("Цена изменилась");
       case 137: er=("Брокер занят");
       case 138: er=("Новые цены");
       case 146: er=("Подсистема торговли занята. Пробуем ещё..");
        Message(er);
         Sleep(2);                         // Простое решение
        RefreshRates();                     // Обновим данные
          continue;
       case 136: er=("Нет цен");
       Message(er);
          while(RefreshRates()==false)        // До нового тика
           Sleep(5);                        // Задержка в цикле
           cnt++; 
           continue;
       
        default:er=StringFormat("Ошибка: %d",Error);             // Другие варианты
        Message(er);
        loop = true;                  // Выход из while
        break;                             // Выход из switc}
        }
                      
            }
          }//
       }
      }
      }
     } //--------------------------Выход из цикла for
  
  return(true);
}

如果当前价格已经超过开盘价,则将止损移至盈亏平衡点。

Deta 

点数。我得到一个错误4051。所有的坦克建设都在文件中(如果你需要)。WMA指标被使用。不是我的,希望没有破损。

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
附加的文件:
v5mz03.mq4  52 kb
WMA.mq4  10 kb
 
Galim_V:

你好,我想让函数

如果当前价格已经超过开盘价,则将止损移至盈亏平衡点。

点数。我得到一个错误4051。所有的坦克建设都在文件中(如果你需要)。WMA指标被使用。不是我的,希望没有破损。

无效的函数参数。猜测一下,你没有检查最低止损单。添加它,这是市场上的一个强制性检查。

......

double TP = NormalizeDouble(Ask+TProfit*Point,Digits);  
double SL=NormalizeDouble(Bid-(2+MarketInfo(OrderSymbol(), MODE_SPREAD)/point),Digits); 
TP=New_Stop(TP);
SL=New_Stop(SL);
......
double New_Stop(double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL);// Миним. дистанция
   if(Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                        // Установим допуст.
      Alert("Увеличена дистанция стоп-приказа или цены открытия отложенных ордеров.");
     }
   return(Parametr);                            // Возврат значения
  }
 
Valeriy Yastremskiy:

无效的函数参数。一目了然,你没有检查最低止损单。添加它,这是市场上的一个强制性检查。

谢谢你!我去看看。

 

如果指标是基于公式的,并且没有调用标准指标,如=iMA(Symbol(),Period(),....,那么如何在一个工作在M1的指标中从D1获取数据?

我如何计算?

 
大家好。我在我的模拟账户(不是真实账户)上遇到过这种情况。)有几个仓位在累计利润达到一定水平时被专家顾问关闭,据说是正数,而所有仓位都坐实了亏损,该事件发生在服务器的2-50(看起来不像是转仓)。专家顾问(由我制作)计算所有未结头寸 的总利润,并将其与预定义的数值进行比较,也就是说,窗口中的条形图就像没有参与一样,尽管它显示了在提供利润的方向上的轻微运动。专家顾问在一个被设置为100ms的计时器上工作。我不排除经纪商的想法,因为另一个经纪商的同一专家顾问具有相同的设置,但与价格的刻度工作,很容易失去利润。我的账户上有一笔储备金,专家顾问报告说从利润实现区块中关闭。也许有人有一些想法,可能出了 问题。
 
Evgeny Vlasov:
大家好。我在一个模拟账户上遇到了这样的情况(不是在真实账户上))。几个头寸在达到一定的累计利润时被专家顾问关闭,据说是正数,而所有的头寸都处于良好的亏损状态,该事件发生在服务器的2-50(看起来不像是转仓)。专家顾问(由我制作)计算所有未结头寸 的总利润,并将其与预定义的数值进行比较,也就是说,窗口中的条形图就像没有参与一样,尽管它显示了在提供利润的方向上的轻微运动。专家顾问在一个被设置为100ms的计时器上工作。我不排除经纪商的想法,因为另一个经纪商的同一专家顾问具有相同的设置,但与价格的刻度工作,很容易失去利润。我的账户上有一笔储备金,专家顾问报告说从利润实现区块中关闭。也许有人有一些想法,可能出了 问题。

这是给你的心灵感应分支))))。它就在这里的某个地方)。

关于这个问题...我不知道。没有代码,没有市场,什么都没有......。肯定是心灵感应))))

原因: