MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 784

 
Roman Efimov:
一般的には、以下のような問題があります他のEAで利確したいのですが、このEAではストップロスを引かせてくれません誰か直してくれないかな〜。作者が答えない!?

そのため、入力パラメータに「0」を入れると、トレーリングストップは発生しません。

extern int TrailingStop =0; // トレイリングストップ、0ならトレイリングストップなし

 
Vitaly Muzichenko:
一度の操作で、すべてのチャートから特定のインディケータを削除することは可能ですか?新しいテンプレートを適用してもうまくいかない。台本とか?

インジケーターを削除するには、チャートを閉じる必要があります。

なぜテンプレートが合わないのか?- はExpert Advisorにぶら下がっているのでしょうか?- 確認したところ、Expert Advisorをチャートテンプレートに保存し、同じEAでテンプレートを適用 すると、Expert Advisorは削除され、このテンプレート上で再度実行されます。

 
Igor Makanu:

インジケーターを削除するには、チャートを閉じる必要があります。

なぜテンプレートが合わないのか?- はExpert Advisorにぶら下がっているのでしょうか?- 確認したところ、Expert Advisorをチャートテンプレートに保存し、同じExpert Advisorからテンプレートを適用 すると、Expert Advisorは削除され、その後このテンプレート上で再開されます。

異なるチャートレイアウトでテンプレートを変更することはできない、など)

 
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値を表示する場合、stringを選択する必要があります。


 
Vitaly Muzichenko:

スイッチ経由で選択し、そこで名前を入力する必要があると理解しています。

コードがint値を表示する場合、stringを選択する必要があります。


EnumToString()で解決するのでは?ただ、ショートインジケータ名にスペースなどの無効な文字が含まれていると、問題が発生する可能性があります。最後の手段として、文字列変数の 配列を作成し、そこから列挙のインデックスを取ることができます。それとも、個人で使うものではないので、コードを書くより説明する方が時間がかかるのでしょうか?

 
Alexey Viktorov:

EnumToString()で解決するのでは?ショートインジケータ名にスペースなどの不正な文字が含まれている場合、問題が発生することがあります。最後の手段として、文字列変数の 配列を作成し、そこから列挙のインデックスを取ることができます。それとも、個人で使うものではないので、コードを書くより説明する方が時間がかかるのでしょうか?

スイッチでやってみるけど、後回し。名前にスペースが入っています。