MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 566 1...559560561562563564565566567568569570571572573...1953 新しいコメント Alexey Viktorov 2018.06.11 08:24 #5651 Vitaly Muzichenko:機能をお試しください。 通貨と先物の両方で機能を使うとなると、そう簡単にはいきませんね。マージン率を考慮する必要があります。 Vitaly Muzichenko 2018.06.11 08:57 #5652 Alexey Viktorov:通貨と先物の両方で機能を使う場合は、それほど単純ではありません。マージンの割合も考えなければならない。損失率について話している場合、我々はマージンに興味がない、それはポジションがクローズさ れたときに返されます Alexey Viktorov 2018.06.11 09:17 #5653 Vitaly Muzichenko:もし、損失の割合について話している場合、我々はマージンに興味がない、それはポジションが閉じられた ときに戻ってくるでしょう。 寝坊したかな...。とか、まだ起きてないとか...。 Roman Sharanov 2018.06.11 15:13 #5654 Alekseu Fedotov:もしかしたら どうやって? PolarSeaman 2018.06.11 22:43 #5655 Nikolay Gaylis:それしか気づかなかったのは残念です)私だけでなく、ターミナルも違いがわからないんですよ、要するに。アレイの外側の 出口はそのままです。 YanSay 2018.06.12 00:30 #5656 Vitaly Muzichenko:機能をお試しください。 ご協力ありがとうございました残念ながら、万能な解決策を導入することはできず、この方法でやるしかありませんでした。 input double MaximumRisk=0.02; //Риск в сделке от депозита { double TickValue =MarketInfo(Symbol(),MODE_TICKVALUE), TickSize =MarketInfo(Symbol(),MODE_TICKSIZE), ContractSize=MarketInfo(Symbol(),MODE_LOTSIZE), Min_Lot =MarketInfo(Symbol(),MODE_MINLOT), Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT), Step =MarketInfo(Symbol(),MODE_LOTSTEP); { //Для пар XXXUSD, USDXXX, XAUUSD, XAGUSD, CRYPTO, для кроссов Lots = NormalizeDouble((((AccountBalance()*MaximumRisk)/(MathAbs(Price-SL)/Point))/TickValue),int(MathAbs(log(Step)))); //Для перечисленного в if if (Symbol() == "BRN" || Symbol() == "WTI" || Symbol() == "NG" || Symbol() == "NIKK225" || Symbol() == "SPX500") {Lots = NormalizeDouble(((((AccountBalance()*MaximumRisk))/MathAbs(Price-SL)))/(ContractSize/TickValue),1);} //Для перечисленного в if if (Symbol() == "ASX200" || Symbol() == "CAC40" || Symbol() == "NQ100" || Symbol() == "STOXX50" || Symbol() == "DAX30" || Symbol() == "FTSE100" || Symbol() == "IBEX35") {Lots = NormalizeDouble(((((AccountBalance()*MaximumRisk))/MathAbs(Price-SL)))/(TickValue/TickSize/Point),1);} } } 私のブローカーにフローティングレバレッジがある場合、ロット計算でどのようにそれを考慮に入れることができるか教えてください。それとも、上記のオプションを選択した場合は、影響がないのでしょうか? PolarSeaman 2018.06.13 09:05 #5657 もう一つの指標、これも配列が範囲外。 チャートには問題なく表示されますが、EAから呼び出すと ...array out of range in 'HiLo.mq4' (121,15) と表示されます。 何が問題なのか?#property copyright "Copyright © november 2015" #property strict #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 RoyalBlue //DodgerBlue #property indicator_color2 Crimson //OrangeRed #property indicator_color3 Black //White #property indicator_color4 Black //White #property indicator_color5 Black //White #property indicator_color6 Black //Red #property indicator_width1 2 #property indicator_width2 2 #property indicator_style3 STYLE_DOT #property indicator_style4 STYLE_DOT input int p = 10; // Период input int s = 5; // Угол наклона input double distance = 2.0; // Ширина канала input bool showBb = false; // Границы канала input bool showCl = true; // Центральная линия input int barsig = 1; // Сигнальная свеча (номер) input int arrots = 0; // Стрелка (отступ) input int arrsz = 0; // Стрелка (размер) input int ATR = 1000; // Период ATR input int cb = 1000; // Сколько свечей в истории double fx1[],fx2[],hp[]; double z1,z2,ki; int fs; double upper[],lower[]; double upar[],dnar[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorBuffers(7); SetIndexBuffer(0,fx1); SetIndexBuffer(1,fx2); SetIndexBuffer(2,lower); SetIndexBuffer(3,upper); SetIndexBuffer(4,upar); SetIndexBuffer(5,dnar); SetIndexBuffer(6,hp); SetIndexStyle (4,DRAW_ARROW,0,arrsz); SetIndexArrow (4,233); SetIndexStyle (5,DRAW_ARROW,0,arrsz); SetIndexArrow (5,234); if(showBb) {SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_LINE); } else {SetIndexStyle(2,DRAW_NONE); SetIndexStyle(3,DRAW_NONE); } if(showCl) {SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); } else {SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_NONE); } SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); //--- 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 i; SetIndexDrawBegin(0,Bars-cb); SetIndexDrawBegin(1,Bars-cb); double avg; ki=2.0/(p+1); for (i=cb; i>=0; i--) {fx1[i]=Close[i];} for (int m=0; m<=s; m++) { z1=fx1[0]; for (i=0; i<=cb; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;} z2=fx1[cb]; for (i=cb; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;} } fs=0; for (i=cb; i>=0; i--) { if (fx1[i]>fx1[i+1]) fs=1; if (fx1[i]<fx1[i+1]) {if (fs==1) fx2[i+1]=fx1[i+1]; fs=2;} if (fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0; avg = iATR(NULL,0,ATR, i+10); upper[i] = hp[i] + distance*avg; lower[i] = hp[i] - distance*avg; if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig]) dnar[i] = High[i]+arrots*Point; else dnar[i] = EMPTY_VALUE; if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig]) upar[i] = Low[i]-arrots*Point; else upar[i] = EMPTY_VALUE; } //--- return value of prev_calculated for next call return(rates_total); } Ihor Herasko 2018.06.13 09:15 #5658 PolarSeaman:もう一つの指標、これも配列が範囲外。 チャートには問題なく表示されますが、EAから呼び出すと ...array out of range in 'HiLo.mq4' (121,15) と表示されます。 何が問題なのか?チャート上に1000本のバーがあるかどうかはチェックしない。例えば、ターミナルを開いた瞬間、すべてのチャートに0本のバーがありますが、ターミナルはすでにインジケータを開始しています(なぜそうなるのかはわかりませんが、事実です)。そのため、インジケーターバッファに アクセスすると、時系列配列がオーバーしてしまいます。 PolarSeaman 2018.06.13 09:24 #5659 Ihor Herasko:チャート上に1000本のバーがあることは確認されていない。例えば、端末が開いた瞬間、全てのチャートに0本のバーがあるが、端末は既に指標を開始している(なぜそうなるかは不明だが、事実である)。そのため、インジケーターバッファに アクセスすると、時系列配列が終了してしまいます。if(Bars<cb)return(0); それでもクラッシュする。 Ihor Herasko 2018.06.13 09:31 #5660 PolarSeaman: それでもクラッシュする。チェックが根本的に間違っているからです。Barsが1000を返し、cbも1000を返すとします。そして、最初の反復のループで、私は値1000を取得します。ループ本体の最初の条件では if (fx1[i]>fx1[i+1]) fs=1; インデックス1000のバーとインデックス1001のバーにアクセスすることで、一度に2つの出口を配列の外に 出すことができます。例えば、チャートに1000本のバーがある場合、最初のバーのインデックスは0、最後のバーのインデックスは999となります。 さらにループ状のボディを進むと、歴史の中でさらに遠い小節に言及されています。 if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig]) これらすべてを考慮した上で、初期チェックを行う必要があります。 適切な確認方法は、MQL4リファレンスのIndicatorCounted()関数の例をご覧ください。IndicatorCounted() は、rates_total (これはBars) と prev_calculated (これはIndicatorCounted()) 変数の共同使用で置き換えるのがよいでしょう。 1...559560561562563564565566567568569570571572573...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
機能をお試しください。
通貨と先物の両方で機能を使うとなると、そう簡単にはいきませんね。マージン率を考慮する必要があります。
通貨と先物の両方で機能を使う場合は、それほど単純ではありません。マージンの割合も考えなければならない。
損失率について話している場合、我々はマージンに興味がない、それはポジションがクローズさ れたときに返されます
もし、損失の割合について話している場合、我々はマージンに興味がない、それはポジションが閉じられた ときに戻ってくるでしょう。
もしかしたら
それしか気づかなかったのは残念です)
私だけでなく、ターミナルも違いがわからないんですよ、要するに。アレイの外側の 出口はそのままです。
機能をお試しください。
ご協力ありがとうございました残念ながら、万能な解決策を導入することはできず、この方法でやるしかありませんでした。
私のブローカーにフローティングレバレッジがある場合、ロット計算でどのようにそれを考慮に入れることができるか教えてください。それとも、上記のオプションを選択した場合は、影響がないのでしょうか?
もう一つの指標、これも配列が範囲外。
チャートには問題なく表示されますが、EAから呼び出すと ...array out of range in 'HiLo.mq4' (121,15) と表示されます。
何が問題なのか?
もう一つの指標、これも配列が範囲外。
チャートには問題なく表示されますが、EAから呼び出すと ...array out of range in 'HiLo.mq4' (121,15) と表示されます。
何が問題なのか?
チャート上に1000本のバーがあるかどうかはチェックしない。例えば、ターミナルを開いた瞬間、すべてのチャートに0本のバーがありますが、ターミナルはすでにインジケータを開始しています(なぜそうなるのかはわかりませんが、事実です)。そのため、インジケーターバッファに アクセスすると、時系列配列がオーバーしてしまいます。
チャート上に1000本のバーがあることは確認されていない。例えば、端末が開いた瞬間、全てのチャートに0本のバーがあるが、端末は既に指標を開始している(なぜそうなるかは不明だが、事実である)。そのため、インジケーターバッファに アクセスすると、時系列配列が終了してしまいます。
それでもクラッシュする。
それでもクラッシュする。
チェックが根本的に間違っているからです。Barsが1000を返し、cbも1000を返すとします。そして、最初の反復のループで、私は値1000を取得します。ループ本体の最初の条件では
インデックス1000のバーとインデックス1001のバーにアクセスすることで、一度に2つの出口を配列の外に 出すことができます。例えば、チャートに1000本のバーがある場合、最初のバーのインデックスは0、最後のバーのインデックスは999となります。
さらにループ状のボディを進むと、歴史の中でさらに遠い小節に言及されています。
これらすべてを考慮した上で、初期チェックを行う必要があります。
適切な確認方法は、MQL4リファレンスのIndicatorCounted()関数の例をご覧ください。IndicatorCounted() は、rates_total (これはBars) と prev_calculated (これはIndicatorCounted()) 変数の共同使用で置き換えるのがよいでしょう。