MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1532 1...152515261527152815291530153115321533153415351536153715381539...1953 新しいコメント Алексей КоКоКо 2021.07.06 05:52 #15311 バッファを扱うことができません。統計を収集し、統計収集は正しく機能し、インジケータはチャート上にすべてを描画します(各ローソク足の下にテキストとして)。しかし、統計で埋めるためにバッファを作成するとすぐにエラー 'CntM5Buffer' - parameter conversion not allowed Trent_flat.mq5 30 21, 私はこれらのバッファを扱うことができません :( //+------------------------------------------------------------------+ //| Trent_flat.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window #property indicator_buffers 1 #include <statistic_func.mqh> #include <obj_text.mqh> int CntM5Buffer[]; ENUM_TIMEFRAMES TF = PERIOD_M5; int bars_on_history = 50; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,CntM5Buffer,INDICATOR_CALCULATIONS); //--- установим индексацию для буфера как в таймсерии ArraySetAsSeries(CntM5Buffer,true); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int start = 1; Comment("RATES_TOTAL = ", rates_total, "\n PREV_CALCULATED = ", prev_calculated, "\nR - P = ", rates_total-prev_calculated); if(rates_total - prev_calculated >0) { int total_bars; if(rates_total-prev_calculated > bars_on_history) { total_bars = bars_on_history; } else { total_bars = rates_total - prev_calculated; } Get_TF_statistic(TF,total_bars,CntM5Buffer); } return(rates_total); } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.07.06 10:01 #15312 どのような仕掛けがあるのか、説明していただけますか? このコードは端末をロードします for(int i=limit;i>=0;i--) { RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i); RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,RSI_Period,0,MODE_SMA,i); } このコードは飛ぶ。 for(int i=limit;i>=0;i--) RSI_01Buffer[i]=iRSI(NULL,0,RSI_Period,RSI_Price,i); for(int i=limit;i>=0;i--) { RSI_02Buffer[i]=iMAOnArray(RSI_01Buffer,0,RSI_Period,0,MODE_SMA,i); } Vitaly Muzichenko 2021.07.06 10:31 #15313 MakarFX:どのような仕掛けがあるのか、説明していただけますか?このコードは端末をロードしますこのコードは飛ぶ。 最初のコードが正しくありません。 まず、"RSI_01Buffer" 配列を収集/充填し、"iMAOnArray" を計算する関数に渡す必要があります。 2番目のコードでは、すべてが正しいです。 Tretyakov Rostyslav 2021.07.06 10:37 #15314 Vitaly Muzichenko:最初のコードが正しくありません。まず、"RSI_01Buffer" 配列を収集/充填し、"iMAOnArray" を計算する関数に渡す必要があります。2番目のコードでは、すべてが正しいです。 ありがとうございました。初めて出会って戸惑いました。 Andrei Sokolov 2021.07.06 11:35 #15315 Taras Slobodyanik:インジケータは1つのスレッドで動作し、1つが待機すれば、他のすべてのインジケータも待機し、端末がハングアップするまで動作します。 MTの起動時に、ターミナル変数の初期化よりも 先にインジケータの初期化が行われることがあります。 ありがとうございます。しかし、今のところ他の選択肢を知らない。 Artyom Trishkin 2021.07.06 12:53 #15316 Andrey Sokolov:ありがとうございます。でも、今のところ他の選択肢を知りません。 そして、その正しい選択肢はとてもシンプルで...。 削除済み 2021.07.06 13:35 #15317 Artyom Trishkin:そして、その正しい選択肢はとてもシンプルで...。 ごめんなさいね~、こんな感じだったらどうでしょう? 正しいのか、あまり正しくないのか?- 正しい理解と実装の仕方も勉強中です)。 //+------------------------------------------------------------------+ //| Demo_iBands.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //--- входные параметры input int bands_period=20; // период скользящей средней input int bands_shift=0; // сдвиг input double deviation=2.0; // кол-во стандартных отклонений input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; // тип цены //--- переменная для хранения хэндла индикатора iBands int handle; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- создадим хэндл индикатора handle=iBands(_Symbol,_Period,bands_period,bands_shift,deviation,applied_price); //--- если не удалось создать хэндл if(handle==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки PrintFormat("Не удалось создать хэндл индикатора iBands для пары %s/%s, код ошибки %d", _Symbol, EnumToString(_Period), GetLastError()); //--- работа индикатора завершается досрочно return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(handle!=INVALID_HANDLE) IndicatorRelease(handle); //--- почистим график при удалении индикатора Comment(""); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- индикаторные буферы //--- get current Bands double UpperBuffer[]; double LowerBuffer[]; double MiddleBuffer[]; if(CopyBuffer(handle,BASE_LINE,-bands_shift,1,MiddleBuffer)!=1|| CopyBuffer(handle,UPPER_BAND,-bands_shift,1,UpperBuffer)!=1|| CopyBuffer(handle,LOWER_BAND,-bands_shift,1,LowerBuffer)!=1) { Print("CopyBuffer from Bands failed, no data"); return; } //--- сформируем сообщение Print("MiddleBuffer =",MiddleBuffer[0], "UpperBuffer =",UpperBuffer[0], "LowerBuffer =",LowerBuffer[0]); } //+------------------------------------------------------------------+ 削除済み 2021.07.06 14:37 #15318 SanAlex:申し訳ないのですが、もしこうだったらどうでしょう? それは正しいでしょうか、間違っているでしょうか?- 正しい理解と実装の仕方も勉強中です)。 私はほとんど学んだ - も位置が開きます //+------------------------------------------------------------------+ //| Demo_iBands.mq5 | //| Copyright 2021, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #define BAND_MAGIC 1234501 #include <Trade\Trade.mqh> CTrade ExtTrade; input group "---- Lots Parameters ----" input double InpLots = 0.1; // Lots input group "---- Bands Parameters ----" input int bands_period = 20; // период скользящей средней input int bands_shift = 0; // сдвиг input double bands_deviation = 2.0; // кол-во стандартных отклонений input ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE; // тип цены //--- переменная для хранения хэндла индикатора iBands bool ExtHedging=false; int handle=0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- prepare trade class to control positions if hedging mode is active ExtHedging=((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING); ExtTrade.SetExpertMagicNumber(BAND_MAGIC); ExtTrade.SetMarginMode(); ExtTrade.SetTypeFillingBySymbol(Symbol()); //--- создадим хэндл индикатора handle=iBands(_Symbol,_Period,bands_period,bands_shift,bands_deviation,applied_price); //--- если не удалось создать хэндл if(handle==INVALID_HANDLE) { //--- сообщим о неудаче и выведем номер ошибки PrintFormat("Не удалось создать хэндл индикатора iBands для пары %s/%s, код ошибки %d", _Symbol, EnumToString(_Period), GetLastError()); //--- работа индикатора завершается досрочно return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(handle!=INVALID_HANDLE) IndicatorRelease(handle); //--- почистим график при удалении индикатора Comment(""); } //+------------------------------------------------------------------+ //| Check for open position conditions | //+------------------------------------------------------------------+ void CheckForOpen(void) { MqlRates rt[2]; //--- go trading only for first ticks of new bar if(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of ",_Symbol," failed, no history"); return; } if(rt[1].tick_volume>1) return; //--- get current Bands double MiddleBuffer[],UpperBuffer[],LowerBuffer[]; if(CopyBuffer(handle,BASE_LINE,-bands_shift,1,MiddleBuffer)!=1|| CopyBuffer(handle,UPPER_BAND,-bands_shift,1,UpperBuffer)!=1|| CopyBuffer(handle,LOWER_BAND,-bands_shift,1,LowerBuffer)!=1) { Print("CopyBuffer from Bands failed, no data"); return; } //--- check signals ENUM_ORDER_TYPE signal=WRONG_VALUE; if(((rt[0].open>MiddleBuffer[0] && rt[0].close<MiddleBuffer[0])|| (rt[0].open>UpperBuffer[0] && rt[0].close<UpperBuffer[0])|| (rt[0].open>LowerBuffer[0] && rt[0].close<LowerBuffer[0]))) signal=ORDER_TYPE_SELL; // sell conditions else { if(((rt[0].open<MiddleBuffer[0] && rt[0].close>MiddleBuffer[0])|| (rt[0].open<UpperBuffer[0] && rt[0].close>UpperBuffer[0])|| (rt[0].open<LowerBuffer[0] && rt[0].close>LowerBuffer[0]))) signal=ORDER_TYPE_BUY; // buy conditions } //--- additional checking if(signal!=WRONG_VALUE) { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) ExtTrade.PositionOpen(_Symbol,signal,InpLots, SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK), 0,0); } } //+------------------------------------------------------------------+ //| Check for close position conditions | //+------------------------------------------------------------------+ void CheckForClose(void) { MqlRates rt[2]; //--- go trading only for first ticks of new bar if(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of ",_Symbol," failed, no history"); return; } if(rt[1].tick_volume>1) return; //--- get current Bands double MiddleBuffer[],UpperBuffer[],LowerBuffer[]; if(CopyBuffer(handle,BASE_LINE,-bands_shift,1,MiddleBuffer)!=1|| CopyBuffer(handle,UPPER_BAND,-bands_shift,1,UpperBuffer)!=1|| CopyBuffer(handle,LOWER_BAND,-bands_shift,1,LowerBuffer)!=1) { Print("CopyBuffer from Bands failed, no data"); return; } //--- positions already selected before bool signal=false; long type=PositionGetInteger(POSITION_TYPE); if(((type==(long)POSITION_TYPE_BUY && rt[0].open>MiddleBuffer[0] && rt[0].close<MiddleBuffer[0])|| (type==(long)POSITION_TYPE_BUY && rt[0].open>UpperBuffer[0] && rt[0].close<UpperBuffer[0])|| (type==(long)POSITION_TYPE_BUY && rt[0].open>LowerBuffer[0] && rt[0].close<LowerBuffer[0]))) signal=true; if(((type==(long)POSITION_TYPE_SELL && rt[0].open<MiddleBuffer[0] && rt[0].close>MiddleBuffer[0])|| (type==(long)POSITION_TYPE_SELL && rt[0].open<UpperBuffer[0] && rt[0].close>UpperBuffer[0])|| (type==(long)POSITION_TYPE_SELL && rt[0].open<LowerBuffer[0] && rt[0].close>LowerBuffer[0]))) signal=true; //--- additional checking if(signal) { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100) ExtTrade.PositionClose(_Symbol,3); } //--- } //+------------------------------------------------------------------+ //| Position select depending on netting or hedging | //+------------------------------------------------------------------+ bool SelectPosition() { bool res=false; //--- check position in Hedging mode if(ExtHedging) { uint total=PositionsTotal(); for(uint i=0; i<total; i++) { string position_symbol=PositionGetSymbol(i); if(_Symbol==position_symbol && BAND_MAGIC==PositionGetInteger(POSITION_MAGIC)) { res=true; break; } } } //--- check position in Netting mode else { if(!PositionSelect(_Symbol)) return(false); else return(PositionGetInteger(POSITION_MAGIC)==BAND_MAGIC); //---check Magic number } //--- result for Hedging mode return(res); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick(void) { //--- if(SelectPosition()) CheckForClose(); else CheckForOpen(); //--- } //+------------------------------------------------------------------+ Алексей КоКоКо 2021.07.06 17:13 #15319 一般的なドキュメントの見方を教えてください。テキストのようなシンプルなグラフィカルオブジェクトの例でさえ、たくさんのコードを含む例を目の前に投げつけられ、どのパラメータが必要でどれが不要なのかどこにも書かれておらず、ただテキストを書いたりトレンドを設定したりインジケータのバッファを理解するために、どのパラメータが最低限必要なのか分からず、愚直に彼らのコードをコピーしなければならないのは本当に困ったものです。 Vladislav Andruschenko 2021.07.06 17:29 #15320 Алексей КоКоКо:一般的なドキュメントの見方を教えてください。テキストのような簡単なグラフィカルオブジェクトの例でさえ、たくさんのコードを含むサンプルを顔に投げつけ、どのパラメータが必須でどれがそうでないかどこにも書かれておらず、ただテキストを書いたり、トレンドを設定したり、インジケータのバッファを理解するために、どの最小限のパラメータを入力しなければならないか理解できず、ただ彼らのコードをコピーして***するのは本当に困りものです。 少なくとも、今はたくさんのドキュメントがあります。記事、事例......。 1...152515261527152815291530153115321533153415351536153715381539...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
バッファを扱うことができません。統計を収集し、統計収集は正しく機能し、インジケータはチャート上にすべてを描画します(各ローソク足の下にテキストとして)。しかし、統計で埋めるためにバッファを作成するとすぐにエラー 'CntM5Buffer' - parameter conversion not allowed Trent_flat.mq5 30 21, 私はこれらのバッファを扱うことができません :(
どのような仕掛けがあるのか、説明していただけますか?
このコードは端末をロードします
このコードは飛ぶ。
どのような仕掛けがあるのか、説明していただけますか?
このコードは端末をロードします
このコードは飛ぶ。
最初のコードが正しくありません。
まず、"RSI_01Buffer" 配列を収集/充填し、"iMAOnArray" を計算する関数に渡す必要があります。
2番目のコードでは、すべてが正しいです。
最初のコードが正しくありません。
まず、"RSI_01Buffer" 配列を収集/充填し、"iMAOnArray" を計算する関数に渡す必要があります。
2番目のコードでは、すべてが正しいです。
インジケータは1つのスレッドで動作し、1つが待機すれば、他のすべてのインジケータも待機し、端末がハングアップするまで動作します。
MTの起動時に、ターミナル変数の初期化よりも 先にインジケータの初期化が行われることがあります。
ありがとうございます。しかし、今のところ他の選択肢を知らない。
ありがとうございます。でも、今のところ他の選択肢を知りません。
そして、その正しい選択肢はとてもシンプルで...。
そして、その正しい選択肢はとてもシンプルで...。
ごめんなさいね~、こんな感じだったらどうでしょう? 正しいのか、あまり正しくないのか?- 正しい理解と実装の仕方も勉強中です)。
申し訳ないのですが、もしこうだったらどうでしょう? それは正しいでしょうか、間違っているでしょうか?- 正しい理解と実装の仕方も勉強中です)。
私はほとんど学んだ - も位置が開きます
一般的なドキュメントの見方を教えてください。テキストのようなシンプルなグラフィカルオブジェクトの例でさえ、たくさんのコードを含む例を目の前に投げつけられ、どのパラメータが必要でどれが不要なのかどこにも書かれておらず、ただテキストを書いたりトレンドを設定したりインジケータのバッファを理解するために、どのパラメータが最低限必要なのか分からず、愚直に彼らのコードをコピーしなければならないのは本当に困ったものです。
一般的なドキュメントの見方を教えてください。テキストのような簡単なグラフィカルオブジェクトの例でさえ、たくさんのコードを含むサンプルを顔に投げつけ、どのパラメータが必須でどれがそうでないかどこにも書かれておらず、ただテキストを書いたり、トレンドを設定したり、インジケータのバッファを理解するために、どの最小限のパラメータを入力しなければならないか理解できず、ただ彼らのコードをコピーして***するのは本当に困りものです。