初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 74 1...676869707172737475767778798081...1503 新しいコメント FinEngineer 2012.12.20 19:12 #731 こんにちは!私は2つのシンボル(例えばEURUSDとGBPUSD)を使用する指標を作成 しようとしましたが、それは描画しません(エラー4806を与える)... 私は各シンボルのOnInit関数(例えばiRSI)で指標ハンドルを取得し、指標のデータをバッファにコピーして、それらでさらに操作を実行します......1つのシンボル(チャート上のシンボルと同じシンボルで、インジケータを装着しています)については問題なく受信できますが、2番目のシンボルのインジケータデータは受信できません・・・つまり、装着しているチャート上のシンボルと同じシンボルのデータのみを受信します・・・何が間違っているのでしょうか? Yedelkin 2012.12.20 19:20 #732 FinEngineer: こんにちは!私は2つのシンボル(例えばEURUSDとGBPUSD)を使用する指標を作成 しようとしましたが、それは描画しません(エラー4806を与える)... 私は各シンボルのOnInit関数(例えばiRSI)で指標ハンドルを取得し、指標のデータをバッファにコピーし、それらでさらに操作を実行します......1つのシンボル(チャート上のシンボルと同じで、インジケータを装着したシンボル)については問題なくインジケータデータを受信しますが、2番目のシンボルについては受信しません・・・つまり、チャート上のシンボルと一致するシンボルのみデータを受信し、それにインジケータを装着します・・・何が間違っているのでしょうか? だから、問題が発生したコードの部分を示してください。 FinEngineer 2012.12.21 00:10 #733 mql4ではもっと簡単だったのですが、慣れていないせいかもしれません...このハンドルと補助バッファが私の脳を殺しているのです。 意味は明確だと思います(相関する2つのシンボルのrsiの差)、助けてください...間違いを指摘してください。#property copyright "著作権 2012, MetaQuotes Software Corp.#プロパティリンク "http://www.mql5.com"#property version "1.00"//---- インジケーターのレンダリングプロパティ#プロパティ indicator_buffers 3#property indicator_separate_window#property indicator_label1 "Pair_delta_RSI"(ペアデルタRSI)。#property indicator_type1 DRAW_LINE#property indicator_color1 レッド#property indicator_style1 STYLE_SOLID#property indicator_width1 1#プロパティ入力パラメータ入力文字列 Symbol1_Name = "EURUSD";入力文字列 Symbol2_Name = "GBPUSD";入力 int PeriodRSI=7;input bool Inversia=false;input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;doubleRSI_Buffer[]。double RSI1_Buffer[];double RSI2_Buffer[];int RSI1_Handle;int RSI2_Handle;int OnInit(){SetIndexBuffer(0,DeltaRSI_Buffer,INDICATOR_DATA)を設定。SetIndexBuffer(1,RSI1_Buffer,INDICATOR_CALCULATIONS)を設定します。SetIndexBuffer(2,RSI2_Buffer,INDICATOR_CALCULATIONS)を設定します。RSI1_Handle=iRSI(Symbol1_Name,0,PeriodRSI,PRICE_CLOSE);// インジケーターハンドルの取得RSI2_Handle=iRSI(Symbol2_Name,0,PeriodRSI,PRICE_CLOSE)とする。return(0)です。}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 &TickVolume[],const long &Volume[],const int &Spread[]){int calculated=BarsCalculated(RSI1_Handle)。if(calculated<rate_total){Print("RSI1_Handleの全てのデータが計算されていません(",calculated, "bars ).Error",GetLastError());return(0)です。}calculated=BarsCalculated(RSI2_Handle)。if(calculated<rate_total){Print("RSI2_Handleの全てのデータが計算されていません(",calculated, "bars ).Error",GetLastError());return(0)です。}//--- すべてのデータをコピーするわけではありませんint to_copy;if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;さもなくば{to_copy=rates_total-prev_calculated とする。if(prev_calculated>0) to_copy++;}//RSI1バッファの受信if(CopyBuffer(RSI1_Handle,0,0,to_copy,RSI1_Buffer)<=0){Print("RSI1の取得に失敗しました!Error",GetLastError());return(0)です。}//RSI2バッファの取得if(CopyBuffer(RSI2_Handle,0,0,to_copy,RSI2_Buffer)<=0){Print("RSI2の取得に失敗しました!Error",GetLastError());return(0)です。}//---int制限。if(prev_calculated==0)limit=0とする。else limit=prev_calculated-1;//calculate delta rsi indicatorfor(int i=limit;i<rate_total; i++)DeltaRSI_Buffer[i]=RSI1_Buffer[i]-RSI2_Buffer[i] とする。return(rates_total);} Automated Trading and Strategy Testing www.mql5.com MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions Questions from Beginners MQL5 インジケータを無償で作成します MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Denis Lazarev 2012.12.21 00:15 #734 エラー1SRCキーの使用失敗 FinEngineer 2012.12.21 08:10 #735 このようなエラーは、例えば、標準のカスタムMACDインジケータを使用して、次の行を変更する場合に発生します。ExtFastMaHandle=iMA(NULL,0,InpFastEMA,0,MODE_EMA,InpAppliedPrice); までExtFastMaHandle=iMA("EURUSD",0,InpFastEMA,0,MODE_EMA,InpAppliedPrice)となります。MACDがEURUSDチャートに添付されている場合、すべてが描画され、他のチャートに添付されている場合 - エラー4806が表示されます... この指標で私が望むだけ多くのシンボルを使用できるようにするにはどうすればよいですか?以前掲載したインジケーターを動作させる方法を教えて頂ければ幸いです。 Артем Иванов 2012.12.21 09:28 #736 mario065: レスター:ここにテンプレートを置いて、中にクロールの方法を示すモディファイを入れました。 https://www.mql5.com/ru/forum/6343/page73 嫌なら、変数を正しく数えることだ。シャブロンファイルのアイデアは成功例もあり、少し自分の条件にもってきて、うまくいったこともあります。しかし、私にとっては重要なデッドロックがあります - 彼らはティックではなく、次のローソクに設定されています。以下は、EAの部分です。 double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; if(PositionSelect(_Symbol)) { Open = PositionGetDouble(POSITION_PRICE_OPEN); SL = PositionGetDouble(POSITION_SL); T_P = PositionGetDouble(POSITION_TP); Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL); buy_trail = NormalizeDouble(Bid - Open,Digits()); sel_trail = NormalizeDouble(Open - Ask,Digits()); if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!PositionGetDouble(POSITION_SL)) { PositionModify(_Symbol,NormalizeDouble((Open-STR-TR),Digits()),NormalizeDouble((Open+TP),Digits())); } mario 2012.12.21 10:42 #737 Lester: 様々な成功を収めながら、私はSchablonファイルの要点を掴み、それを私の条件に合わせて少し調整し、万歳-ストップと利益を設定しました。しかし、私にとっては重要なデッドロックがあります - 彼らはティックではなく、次のローソクに設定されています。以下は、そのコードの一部です。input double TP = 0.003; input double STR = 0.0012; input double TR = 0.0002; //=============================================== //Един вид извикване на модификация на отворената позиция double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; Ну ладно-обяснения: if(PositionSelect(_Symbol)){//Ест ли позиция по символа Open = PositionGetDouble(POSITION_PRICE_OPEN);//цена опен для поза SL = PositionGetDouble(POSITION_SL);//цена стоп для поза T_P = PositionGetDouble(POSITION_TP);//цена тейк для поза Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);//цена бид Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);//цена аск L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);//стоп ниво,если ест такое-оно в пункты buy_trail = NormalizeDouble(Bid - Open,Digits());//вычисляем разстояние от цена бид и цена опен позиции-ето для бай sel_trail = NormalizeDouble(Open - Ask,Digits());//вычисляем разстояние от цена опен позиции и цена аск-ето для сел if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)//если ест бай поза { if(buy_trail > STR)//если разстояние болше указаное { if(NormalizeDouble((Bid - STR),Digits()) >= Open && Open > SL) //если цена бид минус указаное разстояние болше щем цена опен и цена опен болше цена стоп-вызиваем модификация //сама модификация-для стоп будет цена опен,цена тейк не меняем. { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Bid - TR),Digits()) > SL && Open <= SL) //если цена бид минус указаное разстояние TR = 0.0002 болше уже от новый стоп(который поменяли уже) и цена опен менше новый стоп //вызиваем модификация //сама модификация - для стоп будет прошлый стоп минус стоп ниво* _Point(что б стали пипси) плюс указаное TR,цена тейк не меняем. //Т.е. будем двигат стоп через каждые 2 пипса { ModifyPosition(_Symbol,NormalizeDouble(((SL - L_S * _Point) + TR),Digits()),T_P); } } } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { if(sel_trail > STR) { if(NormalizeDouble((Ask + STR),Digits()) <= Open && Open < SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Ask + TR),Digits()) < SL && Open >= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL +L_S * _Point)- TR),Digits()),T_P); } } } } //=============================================== コードには必ず何らかのアクションの条件が含まれているはずですが、すべてチェックされ、何らかのロジックを持っているはずです。 手伝いたい人は、print(" ", ); )で結果を見てください。 Артем Иванов 2012.12.21 11:27 #738 mario065: 描写はどれもわかりやすく、効果も期待できます。しかし、これは「ブレークイーブン」と「トレーリング」の修正である。注文開始後にStopLimitとTakeProfitを設定するように修正する必要がある、つまり。1. 注文受付--------2.ストップリミットの設定変更 (未対応) if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(!PositionGetDouble(POSITION_SL)) { PositionModify(_Symbol,NormalizeDouble((Open-STR-TR),Digits()),NormalizeDouble((Open+TP),Digits())); }------3.ブレークイーブンのための修正4.トレーリングストップの修正5.クローズオーダーポイント2を使って注文を修正することができますが、次のバーの開始時のみです。 mario 2012.12.21 12:52 #739 eatsを開くための関数が書かれています。Сама функция(символ,обем,проскалзивание,стоп,тейк,магик) С вызова функции можно все сразу поставит. bool BuyPositionOpen(const string symbol,double volume,ulong deviation,double StopLoss,double Takeprofit,int Magic) if(Какое то условие) { BuyPositionOpen(_Symbol,Lot,0,NormalizeDouble(Ask - 0.003,_Digits),NormalizeDouble(Ask + 0.003,_Digits),MagicNumber); } if(Какое то условие) { SellPositionOpen(_Symbol,Lot,0,NormalizeDouble(Bid + 0.003,_Digits),NormalizeDouble(Bid - 0.003,_Digits),MagicNumber); } Функция для закрития: Сама функция(символ,проскалзивание,магик) bool BuyPositionClose(const string symbol,ulong deviation,int Magic) // Логика за затваряне на дългите if(Какое то условие){ BuyPositionClose(_Symbol,0,MagicNumber);} // Логика за затваряне на късите if(Какое то условие){ SellPositionClose(_Symbol,0,MagicNumber);} Если не хочете сразу ставит стоп и тейк,тогда: //=============================================== //Един вид извикване на модификация на отворената позиция double buy_trail = 0; double sel_trail = 0; double SL,T_P,Open; ulong L_S; if(PositionSelect(_Symbol)){ Open = PositionGetDouble(POSITION_PRICE_OPEN); SL = PositionGetDouble(POSITION_SL); T_P = PositionGetDouble(POSITION_TP); Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); L_S = SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL); buy_trail = NormalizeDouble(Bid - Open,Digits()); sel_trail = NormalizeDouble(Open - Ask,Digits()); if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { if(SL = 0 && T_P = 0)//если стоп и тейк равни нулю-вызиваете модофикация и там акуратно ложите нужная вам цена { ModifyPosition(_Symbol,NormalizeDouble((Open - 0.003),Digits()),NormalizeDouble((Open + 0.003),Digits())); } //Далше вам понятно: if(buy_trail > STR) { if(NormalizeDouble((Bid - STR),Digits()) >= Open && Open > SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Bid - TR),Digits()) > SL && Open <= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL - L_S * _Point) + TR),Digits()),T_P); } } } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { if(sel_trail > STR) { if(NormalizeDouble((Ask + STR),Digits()) <= Open && Open < SL) { ModifyPosition(_Symbol,Open,T_P); } if(NormalizeDouble((Ask + TR),Digits()) < SL && Open >= SL) { ModifyPosition(_Symbol,NormalizeDouble(((SL +L_S * _Point)- TR),Digits()),T_P); } } } } //=============================================== FinEngineer 2012.12.21 12:58 #740 このスレッドにMQL5開発者はいるのか!?私は間違った支店で質問しているのでしょうか?では、開発者に質問する方法を教えてください。上記の質問は、経験豊富なプログラマーにとっては初歩的なものですが...。 1...676869707172737475767778798081...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは!私は2つのシンボル(例えばEURUSDとGBPUSD)を使用する指標を作成 しようとしましたが、それは描画しません(エラー4806を与える)... 私は各シンボルのOnInit関数(例えばiRSI)で指標ハンドルを取得し、指標のデータをバッファにコピーし、それらでさらに操作を実行します......1つのシンボル(チャート上のシンボルと同じで、インジケータを装着したシンボル)については問題なくインジケータデータを受信しますが、2番目のシンボルについては受信しません・・・つまり、チャート上のシンボルと一致するシンボルのみデータを受信し、それにインジケータを装着します・・・何が間違っているのでしょうか?
mql4ではもっと簡単だったのですが、慣れていないせいかもしれません...このハンドルと補助バッファが私の脳を殺しているのです。
意味は明確だと思います(相関する2つのシンボルのrsiの差)、助けてください...間違いを指摘してください。
#property copyright "著作権 2012, MetaQuotes Software Corp.エラー1
SRCキーの使用失敗
このようなエラーは、例えば、標準のカスタムMACDインジケータを使用して、次の行を変更する場合に発生します。
ExtFastMaHandle=iMA(NULL,0,InpFastEMA,0,MODE_EMA,InpAppliedPrice);
まで
ExtFastMaHandle=iMA("EURUSD",0,InpFastEMA,0,MODE_EMA,InpAppliedPrice)となります。
MACDがEURUSDチャートに添付されている場合、すべてが描画され、他のチャートに添付されている場合 - エラー4806が表示されます... この指標で私が望むだけ多くのシンボルを使用できるようにするにはどうすればよいですか?
以前掲載したインジケーターを動作させる方法を教えて頂ければ幸いです。
レスター:ここにテンプレートを置いて、中にクロールの方法を示すモディファイを入れました。
https://www.mql5.com/ru/forum/6343/page73
嫌なら、変数を正しく数えることだ。
シャブロンファイルのアイデアは成功例もあり、少し自分の条件にもってきて、うまくいったこともあります。しかし、私にとっては重要なデッドロックがあります - 彼らはティックではなく、次のローソクに設定されています。以下は、EAの部分です。
様々な成功を収めながら、私はSchablonファイルの要点を掴み、それを私の条件に合わせて少し調整し、万歳-ストップと利益を設定しました。しかし、私にとっては重要なデッドロックがあります - 彼らはティックではなく、次のローソクに設定されています。以下は、そのコードの一部です。
コードには必ず何らかのアクションの条件が含まれているはずですが、すべてチェックされ、何らかのロジックを持っているはずです。
手伝いたい人は、print(" ", ); )で結果を見てください。
描写はどれもわかりやすく、効果も期待できます。しかし、これは「ブレークイーブン」と「トレーリング」の修正である。注文開始後にStopLimitとTakeProfitを設定するように修正する必要がある、つまり。
1. 注文受付
--------
2.ストップリミットの設定変更 (未対応)
------
3.ブレークイーブンのための修正
4.トレーリングストップの修正
5.クローズオーダー
ポイント2を使って注文を修正することができますが、次のバーの開始時のみです。
eatsを開くための関数が書かれています。