初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1267

 
Vladimir Karputov:

这方面的指标必须有一个输入颜色参数。也就是说,它应该是一个自定义指标

谢谢你!但如果我不能接触到源代码,那就不可行了?

 
Tango_X:

谢谢你!但如果我不能接触到源代码,就不能实现吗?

是的,你必须要有开源或现成的实现。

 
Vladimir Karputov:

是的,你需要有开源代码或准备好的实施方案。

当我在测试器中设置颜色clrNONE时,颜色还是显示出来了!为什么?那么clrNONE在测试器中 不起作用?我不能在现实生活中检查它--今天是周末...

如果我设置任何颜色而不是clrNONE,这个颜色就会显示出来,但空值=却不起作用......奇怪......。
 
Aleksey Mavrin:

答案:也是反复重新加载宏)

但最好是对字符串使用+运算符,将所有的东西都转换为字符串,那么你就不需要有很多参数的函数(和宏)版本。

谢谢。我不知道宏可以重新加载。

 
pivomoe:

谢谢你。我不知道这个宏可以重新加载。

错别字--重装,不是重装)

 

整理了本帮助部分末尾的例子https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

在Metacquot服务器上,一切正常。

在另一台服务器上,在分析了交易请求的错误代码后,我发现问题出在填写MqlTradeResult字段。

request.type_filling = ORDER_FILLING_IOC;

在论坛上搜索并没有找到一个明确的解决方案--如何以编程方式确定 MqlTradeResult字段的服务器设置

ENUM_ORDER_TYPE_FILLING       type_filling;     // Тип ордера по исполнению 


UPD: 找到了一个可行的解决方案https://www.mql5.com/ru/forum/168912/page2#comment_4062864

@fxsaber 谢谢!

 
你能不能告诉我如何设置自动建仓的费波水平?
 
VVT:
请告诉我如何设置自动构建的Fibo水平。

Fibonaci RR 代码中的例子 -

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long chart_id=ChartID();
   datetime time1=ChartTimeOnDropped();
   double price1=ChartPriceOnDropped();
   if(ObjectFind(chart_id,InpFiboName)<0)
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpColor);
   else
     {
      ObjectDelete(chart_id,InpFiboName);
      ChartRedraw(chart_id);
      FiboLevelsCreate(chart_id,InpFiboName,0,time1,price1,time1+InpAddSecond,price1-InpStopLoss*Point(),InpLevelsColor);
     }
//---
   int               levels   = 6;                                                                    // number of level lines
   double            values[6]= {1.0,0.0,2.0,3.0,4.0,5.0};                                            // values of level lines
   color             colors[6];                                                                       // color of level lines
   for(int i=0; i<6; i++)
      colors[i]=InpLevelsColor;
   ENUM_LINE_STYLE   styles[6];                                                                       // style of level lines
   for(int i=0; i<6; i++)
      styles[i]=InpLevelsStyles;
   int               widths[6]= {2.0,2.0,2.0,2.0,2.0,2.0};                                            // width of level lines
   string            texts[6] = {"BREAK EVEN","STOP LOSS","TP1 1.1","TP2 2.1","TP3 3.1","TP4 4.1"};   // text of level lines
//---
   FiboLevelsSet(levels,values,colors,styles,widths,texts,chart_id,InpFiboName);
  }


可以设置的级别有:行数、行值、行色、行风格、行宽、行文。

 
int OnInit()
  {
//---
   ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
  {
   if(id == CHARTEVENT_OBJECT_CREATE)
     {
      I++;
      string result[];      //  массив для получения строк
      StringSplit(sparam, ' ', result); //  получим из имени созданного объекта подстроки
      ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
      string newName = result[0]+" "+result[1]+" "+string(I); //  сформируем новое имя объекта
      ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект

      //----------------------------------------------------------------------------------------
      double   Level_0= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                0     // модификатор свойства
                             );


      double   Level_1= ObjectGetDouble(
                                0,          // идентификатор графика
                                newName,              // имя объекта
                                OBJPROP_PRICE,           // идентификатор свойства
                                1     // модификатор свойства
                             );
      //------------------------------------------------------------------------------------------------------
      if(Level_0 > Level_1)
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrDeepSkyBlue);
        }
      else
        {
         ObjectSetInteger(0,newName,OBJPROP_COLOR,clrYellow);
        }
     }/******************************************************************/
  }

你好,你能告诉我为什么在调试代码时,一步一步地进行,线条会根据坐标值的不同而重新着色。在图形上抛出EA,线条条件if(Level_0 > Level_1)永远不会为真?
 
Kira27:

嘿,你能告诉我为什么在调试中,当一步一步地传递代码时,线条会根据坐标值的不同而重新涂上两种颜色。在图表上抛出EA,如果(Level_0>Level_1)的行条件永远不会为真?

很可能在重命名一个对象后,它还不能被访问。你可以试着把ChartRedraw 放在重命名之后。如果它不起作用,你需要以其他方式建立序列。

ps;另一个选择:先用sparam的名字重画,然后再重命名。