Эксперт: iCustom("USDJPY", ...
А индикатор откуда об этом знает? Лучше добавить в секцию extern индикатора строковую переменную вроде
extern string SymbolName = "USDJPY"; // инструмент по умолчанию
и вызывать стохастик так
Stochastic[i]=iStochastic(SymbolName, 0, ...
(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски)
#propertyindicator_separate_window#propertyindicator_buffers3#propertyindicator_color1Yellow#propertyindicator_color2Red#propertyindicator_color3Red#propertyindicator_minimum0#propertyindicator_maximum100//---- input parameters//extern string st="---Параметры Stochastic---";
extern string SymbolName = "USDJPY";
extern int TimeFrame = 0;
externintKPeriod =12;
externintDPeriod =3;
externintSlowing =2;
//extern string en="---Параметры Envelopes---";externintEnvPeriod=17;
externintDeviation=15;
externintShift=1;
//---- buffersdoubleStochastic[];
doubleUP[];
doubleLOW[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intinit(){//---- indicatorsSetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Stochastic);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,UP);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LOW);
//----return(0);
}intdeinit(){return(0);
}//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intstart(){intlimit;
intcounted_bars=IndicatorCounted();
//---- последний посчитанный бар будет пересчитанif(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
//---- основной циклfor(inti=limit-1; i>=0; i--) // индикаторы лучше рассчитывать слева направо{Stochastic[i]=iStochastic(SymbolName, TimeFrame,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
}for(i=limit-1; i>=0; i--) // см. примечание{UP[i] =iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)+Deviation;
LOW[i]=iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)-Deviation;
)
return(0);
}
Вызов из эксперта:
iCustom("USDJPY", 0, ...
С iMAOnArray вообще надо обращаться аккуратно. Например, поэкспериментировать с порядком ее расчета.
А лучше всего такие вещи делать самому. Кстати, для мультивалютного эксперта может потребоваться везде
явно задавать имя символа и рабочий тайм-фрейм, чтобы избежать умолчательных сюрпризов вроде этого.
alexjouさん、ヘルプを見たら、ありました。
"extern "メモリクラスは、外部変数を定義します。extern修飾子は、データ型の前に指定する。外部変数は、プログラムの入力パラメータを定義し、プログラムのプロパティウィンドウからアクセスできます。 配列は、外部変数として機能しません。"
以下は、カスタムインジケータの全コードです。
EAの外部変数として
テスターでは、このペアが動作します。この場合、何がエラーになるのでしょうか?私が最初に回答しただけで、他の人は回答を見にきて、何も付け加えなかったということです。ですから、ここにいる全員が怒っていて、知識を共有したがらないとは思わないでください。
alexjou !
ちゃんと理解できたかな?
多通貨EAで、特定のシンボルに対してiCustom インディケータを呼び出す場合、インディケータ自体に以下のように記述するのが良いでしょう。
extern string SymbolName = "USDJPY"; // デフォルトシンボル
これは、Expert Advisor での設定以外にもあります。
iCustom("USDJPY",60,・・・)このペアのために
しかし、このカスタムインジケータを他の外部パラメータでもう一つのペアに対して呼び出すと、この他のペアに対して、カスタムインジケータのコピーを別の名前で入力し、そこに他のペアのシンボルも設定しなければならないということになります。
しかし、それならExpert Advisorの内部でiMAOnArrayを自分で計算した方がカスタムインデュークスなしで本当に簡単です!
解説をありがとうございましたさっそくですが...。
klerkさん、週末になるとメールの調子が悪くなるんです。
アドバイザーの私のメールアドレスはこちらです。
rid200549@ya.ru
klerkさん、私のメッセージを受け取ったかどうか、ここかメールで確認してください。
そして、もうひとつ専門家に質問です(あまりにくだらなかったらごめんなさい)。
マルチカレンシーエキスパートアドバイザーで-。
また、各ペアのトレーリングカーブでは、これらの値を入力し代入する必要があるのでしょうか?
それともこのままでよいのでしょうか?また、末尾のペアでは、これらの値も入力・置換する必要があるのでしょうか?