//+------------------------------------------------------------------+//| EMAF.mq4 |//| Kamil Gazizullin |//| forexman77@yandex.ru |//+------------------------------------------------------------------+#property copyright"Kamil Gazizullin"#property link"forexman77@yandex.ru"#property indicator_chart_window#property indicator_buffers1#property indicator_color1 Aqua
//--- input parameters//--- buffersbool flag=true;
double ExtMapBuffer1[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE,0,1);
SetIndexBuffer(0,ExtMapBuffer1);
IndicatorDigits(Digits+1);
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//---- //----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted(),
limit;
double
raznica,raznica_static,MA_1_t,MA_2_t;
if(counted_bars>0)
counted_bars--;
limit=Bars-counted_bars;
staticdouble MA_otshet; //здесь хранится информация по MA_otshetfor(int i=0;i<limit;i++)
{
MA_1_t=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+0);
MA_2_t=iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,i+1);
raznica=MA_1_t-MA_2_t; //разница между сегодня и вчера по скользящей средней
raznica_static=MA_1_t-MA_otshet; //разница между сегодня и MA_otshet
RefreshRates();
if(raznica > -0.0035 && raznica < 0.0035 && flag) // если raznica не превышает заданное число
{
MA_otshet=MA_2_t; // записываем значение MA_otshet
ExtMapBuffer1[i]=MA_otshet; //рисуем значение индикатора, как и вчера
flag=false; // устанавливаем флаг запрета дальнейших расчетов
}
if(raznica_static > -0.0035 && raznica_static < 0.0035) //если raznica_static не превышает заданное число
{
ExtMapBuffer1[i]=MA_otshet; // то рисуем значение индикатора, как записанный MA_otshet
}
if((raznica > 0.0035) || (raznica <- 0.0035)) // если raznica превышает заданное число
{
ExtMapBuffer1[i]=MA_1_t; // то рисуем значение по текущей цене
flag=true; // разрешаем дальнейшие вычисления для расчета в диапазоне от -0.0035 до 0.0035
}
}
return(0);
}
//+------------------------------------------------------------------+
expertsフォルダにVisual Studioのプロジェクトが丸ごと入って いるのですが...。 コンパイルは.exeファイルですよね?
いいえ、コンパイルされたライブラリは、ExpertSample.dll ファイルです。
テンプレートは教科書から引用したものです。今、エラー処理機能が苦手なんです。
注文開始時にRefreshRates();がある(言われた通り、BidsとAsksをMarket Infoに置き換えた)。
また、エラー処理機能。
と聞きたくなりました。129エラーの以下の行を追加してもよろしいでしょうか?
129
err_invalid_price
誤った価格
このエラーが発生した場合、Expert Advisorのロジックを見直す必要があります。取引注文で 誤った価格を送信するのはExpert Advisorの方です。そして、誤った取引注文でサーバーを停滞させることにしたのですか?
自動売買がオフになり、それで終了です。
129
err_invalid_price
誤った価格
このエラーが発生した場合は、EAのロジックを見直す必要があります。取引注文で間違った価格を送信するのはExpert Advisorです。そして、誤った取引注文でサーバーを停滞させることにしたのですか?
自動売買が無効になる、それだけです。
すべてに目を通した。Expert Advisorがリクエストを送信したときかな。
は、どのような価格で購入したかを記憶しているのでしょうか?そして、次のようなことがありました。
買値がMA以下であれば、買います。これまでアスクから買っていたので、アスクとのキャッチボールを行っています。
売るときは問題なかったのに、買うときだけ。
このトピックに関する情報を見つけました。
"要求された開始価格が価格ストリームにない場合、または要求された価格が小数点の後に 正規化されていない場合、エラー129 (ERR_INVALID_PRICE) が生成されます。要求された始値が著しく古い場合、slimageパラメータの値に関係なく、エラー138(ERR_REQUOTE)が発生します。一方、要求された価格が時代遅れであるが、価格の流れの中にまだ存在する場合、ポジションは現在の価格で、現在の価格が価格+スリッページの範囲内にある場合にのみ開かれます。"
結局bidとaskでないなら、取引は成立しているはずです。引用:「要求された価格が期限切れでも価格の流れに存在する場合、ポジションは現在の価格で開き、現在の価格が価格+スリッページの範囲内にある場合にのみ開きます」ホバー時の価格は取引ゾーンに100%入っています。終値は移動平均線を大きく下回りました。
インジケーターがレンダリングできない部分があるのですが。インジケーターの本質は、ある値以上の動きがなければ、MA_otshetの書き込み値のままであることです。
を超えると、その時点に対応した値になる。
以下、インジケーターのコードと解説を掲載します。
インジケーターが描画されない部分がある。インジケーターの本質は、ある値以上の動きがなければ、MA_otshetの記録値のままであることです。
を超えると、その時点に対応した値になる。
以下、インジケーターのコードと説明です。
DRAW_SECTION
すべてに目を通した。EAがリクエストを送るときかな。
どのような価格で購入したかは覚えていますか?そして、次のようなことがありました。
つまり、買値がMA以下であれば、買います。売れなくて困った、ということはないのですが。
売るときは問題なかったのに、買うときだけ。
このトピックに関する情報を見つけました。
"要求された開始価格が価格ストリームにない場合、または要求された価格が小数点の後に正規化されていない場合、エラー129 (ERR_INVALID_PRICE) が生成されます。要求された始値が著しく古い場合、slimageパラメータの値に関係なく、エラー138(ERR_REQUOTE)が発生します。一方、要求された価格が時代遅れであるが、価格の流れの中にまだ存在する場合、ポジションは現在の価格で、現在の価格が価格+スリッページの範囲内にある場合にのみ開かれます。"
結局bidとaskでないなら、取引は成立しているはずです。引用:「要求された価格が期限切れでも価格の流れに存在する場合、ポジションは現在の価格で開き、現在の価格が価格+スリッページの範囲内にある場合にのみ開きます」ホバー時の価格は取引ゾーンに100%入っています。終値は移動平均線を大きく下回りました。
Askが常に正規化されるのは価格だと仮定しよう:それは計算されないので、正規化する意味がないのである。
では、なぜ価格が間違っている可能性があるのでしょうか?データが古くなっているのでは?OrderSend() の直前でRefreshRates()を実行してみてください。
AccountComanyの意味を教えてください。
名前からある程度の結論は出ますが、プログラミング言語であるMT4とどのように関係しているのでしょうか?
AccountCredit?
AccountCurrency?
AccountEquity?
AccountFreeMargin?
AccountFreeMarginCheck?
AccountLeverage?
AccountStopoutLevel?
AccountStopoutMode?
ArrayBsearch?
各コマンドの詳細な説明を知りたいです。よろしくお願いします。
ArrayCopy?
ArrayCopyRates?
ArrayCopySeries?
ArrayDimension?
ArrayGetAsSeries?
アレイレートとは何ですか?