こんにちは、ウラジミール、
私はいつもあなたのコードを見つけています。これも良いEAです。
ありがとうございます。
こんにちは、ウラジミール、
いくつかのインジケータの結果を組み合わせて、その結果を描画したいのです。どうすればできますか?
csezo2 :
こんにちは、ウラジミール、
いくつかのインジケータの結果を組み合わせて、その結果を描画したいのです。どうすればできますか?
あなたがしたことを詳しく説明してください。コードを見せてください。さらに何が必要か教えてください。
#include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> CPositionInfo m_position; // トレード・ポジション・オブジェクト CTrade m_trade; // 取引オブジェクト CSymbolInfo m_symbol; // シンボル情報オブジェクト CAccountInfo m_account; // アカウント情報ラッパー //--- 入力パラメータ input ENUM_TIMEFRAMES per_kis = PERIOD_M15; input ENUM_TIMEFRAMES per_nagy = PERIOD_H1; input int kis_trend_gyors_per= 99; input int kis_trend_lassú_per= 99; input int nagy_trend_gyors_per= 99; input int nagy_trend_lassú_per= 99; input ENUM_MA_METHOD MA_method_kis = MODE_SMA; input ENUM_MA_METHOD MA_method_nagy = MODE_SMA; input int ST_indikátor_periódus = 14; input int RSI_indikátor_periódus = 14; input int STh_alsó = 20; input int ST_lassuló = 3; input ushort TakeProfit=11111; input ushort StopLoss=90; input ushort TrailingStop=20; input double Lots=0.1; ulong m_magic=1; // マジックナンバー ulong m_slippage=30; // スリップ int handle_iMA_kis_trend_gyors; // iMAインジケータのハンドルを格納する変数。 int handle_iMA_kis_trend_lassú; int handle_iMA_nagy_trend_gyors; int handle_iMA_nagy_trend_lassú; int handle_iRSI; int handle_iStochastic_M15; // iStochastic インジケータのハンドルを格納する変数。 ENUM_ACCOUNT_MARGIN_MODE m_margin_mode; double m_adjusted_point; // 3点または5点に調整された点数 //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ int OnInit() { SetMarginMode(); if(!IsHedging()) { Print("Hedging only!"); return(INIT_FAILED); } if(TrailingStop>=TakeProfit) { Print("Error! TrailingStop>=TakeProfit!"); return(INIT_PARAMETERS_INCORRECT); } //--- m_symbol.Name(Symbol()); // シンボル名を設定する if(!RefreshRates()) { Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()), ", Ask=",DoubleToString(m_symbol.Ask(),Digits())); return(INIT_FAILED); } m_symbol.Refresh(); //--- m_trade.SetExpertMagicNumber(m_magic); //--- m_trade.SetDeviationInPoints(m_slippage); //--- 3桁または5桁のチューニング int digits_adjust=1; m_adjusted_point=m_symbol.Point()*digits_adjust; //--- インジケーターiMAのハンドルを作成 handle_iMA_kis_trend_gyors=iMA(m_symbol.Name(),per_kis,kis_trend_gyors_per,0, MA_method_kis,PRICE_CLOSE); //--- インジケーターiMAのハンドルを作成 handle_iMA_kis_trend_lassú=iMA(m_symbol.Name(),per_kis,kis_trend_lassú_per ,0,MA_method_kis , PRICE_CLOSE ); //--- インジケーターiMAのハンドルを作成 handle_iMA_nagy_trend_gyors=iMA(m_symbol.Name(),per_nagy,nagy_trend_gyors_per ,0, MA_method_nagy , PRICE_CLOSE ); //--- インジケーターiMAのハンドルを作成 handle_iMA_nagy_trend_lassú=iMA(m_symbol.Name(),per_nagy,nagy_trend_lassú_per ,0, MA_method_nagy , PRICE_CLOSE ); //--- iRSI インジケータのハンドルを作成する。 handle_iRSI=iRSI(m_symbol.Name(),per_kis,RSI_indikátor_periódus, PRICE_CLOSE); //--- iStochastic インジケータのハンドルを作成する。 handle_iStochastic_M15=iStochastic(m_symbol.Name(),per_kis,ST_indikátor_periódus,3,ST_lassuló,MODE_SMA,STO_CLOSECLOSE); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパート初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| エキスパート・ティック機能| //+------------------------------------------------------------------+ void OnTick() { if(kis_trend_gyors_per>=kis_trend_lassú_per || nagy_trend_gyors_per>=nagy_trend_lassú_per) return; static datetime PrevBars=0; datetime time_0=iTime(0); if(time_0==PrevBars) return; PrevBars=time_0; //--- вычисляем начальные параметры индикаторов для поиска условий входа double MA_kis_trend_gyors = iMAGet(handle_iMA_kis_trend_gyors,0); double MA_kis_trend_lassú = iMAGet(handle_iMA_kis_trend_lassú,0); double MA_nagy_trend_gyors = iMAGet(handle_iMA_nagy_trend_gyors,0); double MA_nagy_trend_lassú = iMAGet(handle_iMA_nagy_trend_lassú,0); double Stoh_fast = iStochasticGet(MAIN_LINE,0); double Stoh_fast_prew=iStochasticGet(MAIN_LINE,1); double RSI0 = iRSIGet(0); double RSI1 = iRSIGet(1); double StRSI=(Stoh_fast*RSI0)/100;//------------------------------------------------------------------------ I would like to draw out these outcomes. double StRSI_prew=(Stoh_fast_prew*RSI1)/100;//-------------------------------------------------------------- double price_M15=iClose(1,NULL,per_kis); bool Long=false; if(MA_kis_trend_gyors>MA_kis_trend_lassú && MA_nagy_trend_gyors>MA_nagy_trend_lassú) Long=true; if(!Long ) return; //--- условий для совершения сделки if(Long==true ) { if( StRSI>STh_alsó && StRSI_prew<=STh_alsó ) { if(!RefreshRates()) return; //--- 資金不足」エラーを避けるため、OrderSendの前に出来高をチェックする。 double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),Lots,m_symbol.Ask(),ORDER_TYPE_BUY); if(chek_volime_lot!=0.0) if(chek_volime_lot>=Lots) { Print("BUY разница (MA_M15-price_M15) = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits()), " MA_M15 = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits()), " price_M15 = ",DoubleToString(MA_kis_trend_gyors,m_symbol.Digits())); double sl=m_symbol.NormalizePrice(m_symbol.Bid()-StopLoss*m_adjusted_point); double tp=m_symbol.NormalizePrice(m_symbol.Bid()+TakeProfit*m_adjusted_point); if(m_trade.Buy(Lots,NULL,m_symbol.Ask(),sl,tp)) { if(m_trade.ResultDeal()==0) Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); else Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } else Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } } //--- трейлинг if(TrailingStop==0) return; for(int i=PositionsTotal()-1;i>=0;i--) if(m_position.SelectByIndex(i)) // プロパティにさらにアクセスするために、インデックスによって位置を選択する。 if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(!RefreshRates()) continue; if(m_symbol.Bid()-m_position.PriceOpen()>TrailingStop*m_adjusted_point) { if(m_position.StopLoss()<m_symbol.Bid()-TrailingStop*m_adjusted_point) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(m_symbol.Bid()-TrailingStop*m_adjusted_point), m_position.TakeProfit())) Print("PositionModify -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } } } //--- return; } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void SetMarginMode(void) { m_margin_mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ bool IsHedging(void) { return(m_margin_mode==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING); } //+------------------------------------------------------------------+ //| シンボルのクォートデータを更新する。| //+------------------------------------------------------------------+ bool RefreshRates() { //--- リフレッシュ・レート if(!m_symbol.RefreshRates()) return(false); //--- "ゼロ "の戻り値からの保護 if(m_symbol.Ask()==0 || m_symbol.Bid()==0) return(false); //--- return(true); } //+------------------------------------------------------------------+ //| iMAのバッファーの値を取得する。| //+------------------------------------------------------------------+ double iMAGet(int handle_iMA,const int index) { double MA[1]; //--- エラーコードをリセットする ResetLastError(); //--- iMABuffer配列の一部を、インデックスが0のインジケータ・バッファの値で埋める。 if(CopyBuffer(handle_iMA,0,index,1,MA)<0) { //--- コピーに失敗したら、エラーコードを伝える。 PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError()); //--- これは、インジケータが計算されていないとみなされることを意味する。 return(0.0); } return(MA[0]); } //+------------------------------------------------------------------+ //| iStochastic|のバッファの値を取得する。 //| バッファ番号は以下の通り:| | 0 - メイン・ライン、1 - シグナル・ライン| //+------------------------------------------------------------------+ double iStochasticGet(const int buffer,const int index) { double Stochastic[1]; //--- エラーコードをリセットする ResetLastError(); //--- iStochasticBuffer配列の一部を、インデックスが0のインジケータ・バッファの値で埋める。 if(CopyBuffer(handle_iStochastic_M15,buffer,index,1,Stochastic)<0) { //--- コピーに失敗したら、エラーコードを伝える。 PrintFormat("Failed to copy data from the iStochastic indicator, error code %d",GetLastError()); //--- これは、インジケータが計算されていないとみなされることを意味する。 return(0.0); } return(Stochastic[0]); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| iRSIのバッファの値を取得する。| //+------------------------------------------------------------------+ double iRSIGet(const int index) { double RSI[1]; //--- エラーコードをリセットする ResetLastError(); //--- iRSI配列の一部を、インデックスが0のインジケータ・バッファの値で埋める。 if(CopyBuffer(handle_iRSI,0,index,1,RSI)<0) { //--- コピーに失敗したら、エラーコードを伝える。 PrintFormat("Failed to copy data from the iRSI indicator, error code %d",GetLastError()); //--- これは、インジケータが計算されていないとみなされることを意味する。 return(0.0); } return(RSI[0]); } //+------------------------------------------------------------------+ | 指定されたバー・インデックスのクローズを取得| //+------------------------------------------------------------------+ double iClose(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=per_kis; double Close[1]; double close=0; int copied=CopyClose(symbol,timeframe,index,1,Close); if(copied>0) close=Close[0]; return(close); } //+------------------------------------------------------------------+ | 指定したバー・インデックスの時間を取得| //+------------------------------------------------------------------+ datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=per_kis; datetime Time[1]; datetime time=0; int copied=CopyTime(symbol,timeframe,index,1,Time); if(copied>0) time=Time[0]; return(time); } //+------------------------------------------------------------------+
ポリッシュレイヤーとゲットトレンドの組み合わせ。空白の背景で問題を強調した。
csezo2:
ポリッシュレイヤーとゲットトレンドの組み合わせ。空白の背景で問題を強調した。
ポリッシュレイヤーとゲットトレンドの組み合わせ。空白の背景で問題を強調した。
//--- インジケーターiMAのハンドルを作成 handle_iMA_kis_trend_gyors=iMA(m_symbol.Name(),per_kis,kis_trend_gyors_per,0,MA_method_kis,PRICE_CLOSE); //--- ハンドルが作成されていない場合 if(handle_iMA_kis_trend_gyors==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iMA_kis_trend_gyors\" of the iMA indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); } //--- インジケーターiMAのハンドルを作成 handle_iMA_kis_trend_lassú=iMA(m_symbol.Name(),per_kis,kis_trend_lassú_per,0,MA_method_kis,PRICE_CLOSE); //--- ハンドルが作成されていない場合 if(handle_iMA_kis_trend_lassú==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iMA_kis_trend_lassú" of iMA indicator for symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); } //--- インジケーターiMAのハンドルを作成 handle_iMA_nagy_trend_gyors=iMA(m_symbol.Name(),per_nagy,nagy_trend_gyors_per,0,MA_method_nagy,PRICE_CLOSE); //--- ハンドルが作成されていない場合 if(handle_iMA_nagy_trend_gyors==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iMA_nagy_trend_gyors\" of the iMA indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); } //--- インジケーターiMAのハンドルを作成 handle_iMA_nagy_trend_lassú=iMA(m_symbol.Name(),per_nagy,nagy_trend_lassú_per,0,MA_method_nagy,PRICE_CLOSE); //--- ハンドルが作成されていない場合 if(handle_iMA_nagy_trend_lassú==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iMA_nagy_trend_lassú" of iMA indicator for symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); } //--- iRSI インジケータのハンドルを作成する。 handle_iRSI=iRSI(m_symbol.Name(),per_kis,RSI_indikátor_periódus,PRICE_CLOSE); //--- ハンドルが作成されていない場合 if(handle_iRSI==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iRSI\" of the iRSI indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); } //--- iStochastic インジケータのハンドルを作成する。 handle_iStochastic_M15=iStochastic(m_symbol.Name(),per_kis,ST_indikátor_periódus,3,ST_lassuló,MODE_SMA,STO_CLOSECLOSE); //--- ハンドルが作成されていない場合 if(handle_iStochastic_M15==INVALID_HANDLE) { //--- 失敗を伝え、エラーコードを出力する。 PrintFormat("Failed to create handle \"handle_iStochastic_M15\" of the iStochastic indicator for the symbol %s/%s, error code %d", m_symbol.Name(), EnumToString(per_kis), GetLastError()); //--- インジケータは早期に停止する return(INIT_FAILED); }
//--- これらの結果を引き出したい。 double StRSI=(Stoh_fast*RSI0)/100.0; double StRSI_prew=(Stoh_fast_prew*RSI1)/100.0; //---
ファイル:
1.mq5
33 kb
ストキャスティクスと RSIを掛け合わせた結果を引き出したい。
csezo2 :
ストキャスティクスとRSIを掛け合わせた結果を引き出したい。
ストキャスティクスとRSIを掛け合わせた結果を引き出したい。
理解できません。
他の言葉で説明するか、絵を描いてみてください。

取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
Polish Layer:
このエキスパートアドバイザーはRSI、WPR、ストキャスティクス、移動平均、deMarker指標に基づいています。
作者: Vladimir Karputov