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

 
Roman Efimov:
一般来说,问题在于以下几点我想用另一个EA来拖动利润,但这个EA不允许我拉动止损来获得利润!谁能解决这个问题!?作者没有回答!

所以在输入参数中填入 "0",就不会有尾随止损。

外部int TrailingStop =0; // 追踪止损,如果是0,没有追踪止损。

 
Vitaly Muzichenko:
如何能在所有图表中一举删除一个特定的指标?应用一个新的模板并不奏效。也许是一个脚本?

你仍然需要关闭图表来删除该指标

为什么模板不合适?- 专家顾问是否挂在上面?- 我检查过了,你可以在一个图表模板中保存专家顾问,然后在同一个EA中应用这个模板--专家顾问将被删除,然后它将在这个模板上再次运行。

 
Igor Makanu:

你仍然需要关闭图表来删除该指标

为什么模板不合适?- 专家顾问是否挂在上面?- 我检查过了,你可以在一个图表模板中保存专家顾问,并从同一个专家顾问中应用模板--专家顾问将被删除,然后在这个模板上重新启动。

你不能在不同的图表布局上改变模板,等等)。

 
Vitaly Muzichenko:

在不同的标记图表之类的东西上,你不能替换图案)

在谷歌上搜索,有ChartIndicatorDelete()。

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

从未使用过,不能说什么

ChartIndicatorDelete - Операции с графиками - Справочник MQL4
ChartIndicatorDelete - Операции с графиками - Справочник MQL4
  • docs.mql4.com
Удаляет с указанного окна графика индикатор с указанным именем. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError...
 
Igor Makanu:

在谷歌上搜索,有ChartIndicatorDelete()。

https://docs.mql4.com/ru/chart_operations/chartindicatordelete

我没有用过它,所以我不能说什么。

是的,谢谢,阿列克谢 已经对此作了提醒。

这样做了,一切都很好,除了。我怎样才能神奇地写出它,使我在输入参数中选择删除哪一个?

#property version   "1.00"
#property strict
#property show_inputs

enum ind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input string ProgName = "Candles Signal";

long list_id[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
 int size=ChartGetIDList(list_id);
  //
  for(int i=size-1;i>=0;i--) {
   long id=list_id[i];
   for(int k=ChartIndicatorsTotal(id,0);k>=0;k--) {
    if(ChartIndicatorName(id,0,k)==ProgName) {
     Print(ChartSymbol(id),"=",ChartIndicatorName(id,0,k));
     ChartIndicatorDelete(id,0,ProgName);
    }
   }
  }
 }
//+------------------------------------------------------------------+
int ChartGetIDList(long &List[]) {
 int i=0;
 long chartID=ChartFirst();
 while(chartID!=-1) {
    i++;
     ArrayResize(List,i);
     List[i-1]=chartID;
   chartID=ChartNext(chartID);
  }
  return(ArraySize(List));
 }
 

有一个指标可以从高龄期获得数值,for(i=0;y=0;i<li_0;i++)

如何做一个循环 for (int i = li_0; i >= 0; i--)

   datetime TimeArray[];
   int    i,shift,y=0;
      int counted = IndicatorCounted();
   if (counted < 0) return (-1);
   if (counted > 0) counted--;
   int li_0 = Bars - counted;
    
   // Plot defined timeframe on to current timeframe   
   ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); 
   
   for(i=0,y=0;i<li_0;i++)
 //  for (int i = li_0; i >= 0; i--) //ДЛЯ ТАКОГО ЦИКЛА КАК СДЕЛАТЬ
     {
     if (Time[i]<TimeArray[y]) y++;
     stro_1=NormalizeDouble(iCustom(NULL, TimeFrame, "slow", 0, y+1), Digits);
     }
 
Vitaly Muzichenko:

是的,谢谢,阿列克谢 已经让我知道了这件事。

这样做了,一切都很好,除了。我怎样才能神奇地规定它,以便在输入参数中选择删除哪一个?

这里有一个脚本可以检查

#property strict
#property show_inputs
enum Eind {
 ind_1, // Indicator 1
 ind_2, // Indicator 2
 ind_3, // Indicator 3
 ind_4  // Indicator 4
};

input Eind param = ind_1;
//+------------------------------------------------------------------+
void OnStart()
  {
   Alert("Выбран :",param);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

这里有一个测试的脚本

我知道你需要通过开关选择,并在那里输入名字。

你的代码打印的是一个int值,你需要选择字符串


 
Vitaly Muzichenko:

我知道你需要通过开关选择,并在那里输入名字。

你的代码打印的是一个int值,你需要选择字符串


EnumToString()难道不能帮助你吗?如果短指标名称中有一个空格或其他无效字符,可能会出现唯一的问题。作为最后的手段,你可以创建一个字符串变量 数组,并从那里获取枚举的索引。或者它不适合个人使用,解释的时间比写代码的时间还长?

 
Alexey Viktorov:

EnumToString()难道不能帮助你吗?如果短指标名称中有一个空格或其他无效字符,就可能出现问题。作为最后的手段,你可以创建一个字符串变量 数组,并从那里获取枚举的索引。或者它不适合个人使用,解释的时间比写代码的时间还长?

我会试着用开关来做,但要等到以后。名字里有空格。