Membaiki ralat Array di luar julat dalam MT4 EA
Halaman 1 daripada 1132 12 TerakhirTerakhir
Results 1 to 10 of 13

Thread: Membaiki ralat Array di luar julat dalam MT4 EA

  1. #1
    Saya membuat EA dengan perkara berikut...

    extern int IntIndTF1 = 4;
    extern int IntInd1S1 = 2;
    extern int IntInd1S2 = 14;

    extern int IntIndTF2 = 1;
    extern int IntInd2S1 = 3;
    extern int IntInd2S2 = 9;
    Dimasukkan Kod PerH1 = Tinggi#91;iHighest(SymbolToManage,IntIndTF1,MODE_H IGH,IntInd1S2,IntInd1S1)#93;; PerL1 = Rendah#91;iLowest(SymbolToManage,IntIndTF1,MODE_LO W,IntInd1S2,IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = Tinggi#91;iHighest(SymbolToManage,IntIndTF2,MODE_H IGH,IntInd2S2,IntInd2S1)#93;; PerL2 = Rendah#91;iLowest(SymbolToManage,IntIndTF2,MODE_LO W,IntInd2S2,IntInd2S1)#93;; PerM2 = NormalizeDouble((PerH2 PerL2)/2,Digits);
    Ia berfungsi dengan baik sehingga saya mula menguji simbol lain dengannya, kemudian datang Array yang ditakuti daripada ralat julat, jadi saya menukarnya kepada ini...
    Dimasukkan Kod int BarCount = Bar; jika (BarCount lt; 1) BarCount = 1; untuk (int i=0; igt;Bar; i--) { PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,i IntInd1S1)#93;; PerL1 = Rendah#91;iLowest(SymbolToManage,IntIndTF1,MODE_LO W,IntInd1S2,i IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = Tinggi#91;iHighest(SymbolToManage,IntIndTF2,MODE_H IGH,IntInd2S2,i IntInd2S1)#93;; PerL2 = Rendah#91;iLowest(SymbolToManage,IntIndTF2,MODE_LO W,IntInd2S2,i IntInd2S1)#93;; PerM2 = NormalizeDouble((PerH2 PerL2)/2,Digits); } Ralat di luar julat tatasusunan nampaknya telah berkurangan. NAMUN, sekarang saya tidak boleh mendapatkannya untuk mensimulasikan tetapan sebelumnya yang berfungsi dengan baik...

    extern int IntIndTF1 = 4;
    extern int IntInd1S1 = 2;
    extern int IntInd1S2 = 14;

    extern int IntIndTF2 = 1;
    extern int IntInd2S1 = 3;
    extern int IntInd2S2 = 9;

    Saya telah menguji julat 1 dan -1 tetapi EA kini tidak kembali kepada nilai yang dikira yang sama untuk bar yang sama. Bagaimanakah saya boleh menukar kod untuk menghapuskan ralat namun mengekalkan nilai dan keputusan yang diuji sebelum ini.

    Ini dalam EA tidak menggunakan penunjuk. Nilai untuk HHLL adalah dalam EA itu sendiri. Saya mahu ia dapat membaca dan mendapatkan hasil yang sama untuk pembolehubah luaran pada bar yang mencetuskan isyarat.

  2. #2
    Saya menambah -1 pada kiraan bar had dan nampaknya berfungsi tanpa menjejaskan sebarang perubahan pada keputusan jadi tidak mengapa. Untuk memastikan iLowest/iHigheset tidak kembali -1 Saya melakukan ini, agak pasti ia bukan cara yang betul b/c hasilnya adalah mengerikan... Inserted Code int BarsCounted1 = TFBars1-MathMax(IntInd1S2,IntInd1S1 1); jika (BarsCounted1 lt; 0) {return;} int LimitBars1 = TFBars1-BarsCounted1; untuk (BarCount1 = LimitBars1-1; BarCount1 gt;= 0; BarCount1--) { if ((iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,IntI nd1S2,BarCount1 IntInd1S1) lt; 0) || (iLowest(SymbolToManage,IntIndTF1,MODE_HIGH,IntInd 1S2,BarCount1 IntInd1S1) lt; 0) || (iLowest(SymbolIndTF1,IntIndTF1) ,IntInd1S2,BarCount1 IntInd1S1) lt; 0)) kembali; jika ((iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,IntI nd1S2,BarCount1 IntInd1S1) gt; -1) (iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntInd1 S2,BarCount1 Int1S1) teruskan; PerH1 = Tinggi#91;iHighest(SymbolToManage,IntIndTF1,MODE_H IGH,IntInd1S2,BarCount1 IntInd1S1)#93;; PerL1 = Rendah#91;iLowest(SymbolToManage,IntIndTF1,MODE_LO W,IntInd1S2,BarCount1 IntInd1S1)#93;;/PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); }

  3. #3

    Quote Originally Posted by ;
    Ya, itu adalah ralat salin dan tampal di atas. Tidak pasti saya memahami larian selepas konsep bar ke-17 dan cara melaksanakannya atau sebab ia berfungsi. Sementara itu, saya telah menyelesaikan perkara ini...diulang kali kedua dengan set pembolehubah kedua untuk penunjuk kedua dalam ea. Bar dengan peralihan masa yang disebut dengan menjadikan ujian lebih terkawal dan kurang mengikut kehendak pengkompil MT4 kerana ia menguji mana-mana TF tetapi diletakkan pada carta 4jam. Akhirnya saya mahu ea berjalan sama dengan hasil yang sama tanpa mengira carta TF itu...
    Jangan lupa (-1) untuk menukar daripada saiz kepada kedudukan BarCount1=LimitBars1-1 dan pastikan iLowest/iHighest tidak kembali -1

  4. #4
    Ya, itu adalah ralat salin dan tampal di atas. Tidak pasti saya memahami larian selepas konsep bar ke-17 dan cara melaksanakannya atau sebab ia berfungsi. Sementara itu, saya telah menyelesaikan perkara ini...diulang kali kedua dengan set pembolehubah kedua untuk penunjuk kedua dalam ea. Bar dengan anjakan masa yang disebut oleh Beerrun menjadikan ujian lebih terkawal dan kurang mengikut kehendak pengkompil MT4 kerana ia sedang menguji mana-mana TF tetapi diletakkan pada carta 4jam. Akhirnya saya mahu ea berjalan sama dengan keputusan yang sama tanpa mengira carta TF yang dihidupkan. Saya rasa membaca TF dari Bars() adalah sebahagian daripada penyelesaian. Ralat di luar julat tatasusunan, masih menjadi isu, apakah kepentingan bar ke-17 dan bagaimana anda mendapatkan ea untuk dijalankan selepas bar ke-17? Dimasukkan Kod int BarCount1; int TFBars1 = Bar(SymbolToManage,IntIndTF1); int BarsCounted1 = TFBars1-MathMax(IntInd1S2,IntInd1S1 1); jika (BarsCounted1 lt; 0) {return;} int LimitBars1 = TFBars1-BarsCounted1; untuk (BarCount1 = LimitBars1; BarCount1 gt;= 0; BarCount1--) { PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,BarCount1 IntInd1S1)#93;; dan lain-lain... }

  5. #5

    Quote Originally Posted by ;
    Saya telah berjaya mendapatkan pembolehubah lulus walaupun dan mensimulasikan keputusan sebelumnya dengan sangat rapat dengan ini... int counted_bars=Bars-MathMax(MathMax(IntInd1S2,IntInd2S2),MathMax(IntIn d1S1,IntInd2S1)); for(int i=Bars-counted_bars-1;igt;0;i--) { PerH1 = High[iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,IntInd 1S2,i IntInd1S1)]; PerL1 = Rendah[iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntInd1S 2,i IntInd1S1)]; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = Tinggi[iHighest(SymbolToManage,IntIndTF2,MODE_HIGH,IntInd 2S2,i IntInd2S1)]; PerL2 = Rendah[iLowest(SymbolToManage,IntIndTF2,MODE_LOW,IntInd2S 2,i IntInd2S1)];...
    Adakah anda pasti anda mendapat ralat daripada perkara di atas? Kerana ini tidak mengisi sebarang tatasusunan, ia hanya memberikan nilai i terakhir kepada beregu dan melakukan kitaran yang tidak perlu. Hai! ofc ia mungkin mencecah beberapa Tinggi atau Rendah di luar julat. Untuk itu, tetapkan ea untuk berjalan selepas bar ke-17.

  6. #6

    Quote Originally Posted by ;
    Nah, saya masih mendapat pelbagai daripada ralat julat pada simbol lain semasa ujian dengan ini. Meletakkannya daripada semak dengan semak semak menjadikannya lebih pantas adalah satu kelebihan tetapi ia tidak menyelesaikan isu asal. Kembali kepada bergelut itu.
    Mungkin gunakan fungsi Bars() yang mengambil simbol dan jangka masa sebagai parameter, dan bukannya pembolehubah Bar yang terhad kepada simbol carta dan jangka masa semasa. Perkara tambahan yang perlu dipertimbangkan ialah jika iLowest/Highest mengembalikan ralat, anda#8217;d akan melakukan Low[-1]

  7. #7
    Saya telah berjaya mendapatkan pembolehubah untuk lulus walaupun dan mensimulasikan keputusan sebelumnya dengan sangat rapat dengan ini... Inserted Code int counted_bars=Bars-MathMax(MathMax(IntInd1S2,IntInd2S2),MathMax(IntIn d1S1,IntInd2S1)); for(int i=Bars-counted_bars-1;igt;0;i--) { PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,i IntInd1S1)#93;; PerL1 = Rendah#91;iLowest(SymbolToManage,IntIndTF1,MODE_LO W,IntInd1S2,i IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = Tinggi#91;iHighest(SymbolToManage,IntIndTF2,MODE_H IGH,IntInd2S2,i IntInd2S1)#93;; PerL2 = Rendah#91;iLowest(SymbolToManage,IntIndTF2,MODE_LO W,IntInd2S2,i IntInd2S1)#93;; PerM2 = NormalizeDouble((PerH2 PerL2)/2,Digits); IntInd1S2,i IntInd1S1 sebelum ini ditetapkan pada 2 dan 14 dan kini berfungsi pada 1 dan 13 yang masuk akal. Masih mendapat tatasusunan daripada ralat julat walaupun.

  8. #8
    Nah, saya masih mendapat pelbagai daripada ralat julat pada simbol lain semasa ujian dengan ini. Meletakkannya daripada semak dengan semak semak menjadikannya lebih pantas adalah satu kelebihan tetapi ia tidak menyelesaikan isu asal. Kembali kepada bergelut itu. Inserted Code int counted_bars=IndicatorCounted(); for(int i=Bars-counted_bars-1;igt;0;i--) { PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,IntInd1S1)#93;; PerL1 = Rendah#91;iLowest(SymbolToManage,IntIndTF1,MODE_LO W,IntInd1S2,IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = Tinggi#91;iHighest(SymbolToManage,IntIndTF2,MODE_H IGH,IntInd2S2,IntInd2S1)#93;; PerL2 = Rendah#91;iLowest(SymbolToManage,IntIndTF2,MODE_LO W,IntInd2S2,IntInd2S1)#93;; PerM2 = NormalizeDouble((PerH2 PerL2)/2,Digits); }

  9. #9

    Quote Originally Posted by ;
    {quote} Ya, ia sepatutnya berkesan. Jika tidak, buat pembolehubah untuk mengekalkan kiraan berjalan. Jika tidak, ia akan menjalankan gelung untuk setiap bar pada setiap tanda.
    Inilah yang saya lakukan... Inserted Code int counted_bars=IndicatorCounted(); for(int i=Bars-counted_bars-1;igt;0;i--) { etc. etc. etc. } Nampaknya ia mungkin telah menjaga tatasusunan di luar julat, saya perlu menyemak simbol lain untuk menguji . Walau bagaimanapun, ujian dengan tanda telah mengambil selama-lamanya. Oleh itu, saya menyemak bila dan di mana kod ini dipanggil dan mengeluarkannya daripada bahagian atas OnInit yang tidak sah dan meletakkannya selepas Kod Dimasukkan statik datetime prevtime = Time#91;0#93;; if (prevtime == Time#91;0#93 return; prevtime = Masa#91;0#93;; yang saya ada berhampiran bahagian bawah OnInit Ia tidak perlu disemak semak demi semak, hanya dengan bar, manakala bahagian lain strategi keluar memerlukan pemantauan semak demi semak. Saya fikir ia sepatutnya berfungsi sekarang. Saya perlu menyemaknya terhadap simbol lain yang memberi saya masalah, tetapi mengambil kod daripada semak dengan semak semak menjadikannya berjalan lebih pantas sudah tentu.

  10. #10

    Quote Originally Posted by ;
    {quote} Kod ini berada di dalam ea sahaja, bukan penunjuk akan IndicatorCounted() masih berfungsi di dalam ea?
    Ya, ia sepatutnya berkesan. Jika tidak, buat pembolehubah untuk mengekalkan kiraan berjalan. Jika tidak, ia akan menjalankan gelung untuk setiap bar pada setiap tanda.

Kebenaran Posting

  • Anda tidak boleh menghantar thread baru
  • Anda tidak boleh membalas kiriman
  • Anda tidak boleh mengedit siaran anda
  • Anda tidak boleh menyiarkan lampiran
  •  
  • Kod BB Hidup
  • Smilies Hidup
  • Kod [IMG] adalah Hidup
  • Kod [VIDEO] adalah Hidup
  • Kod HTML Tidak Hidup
Polisi Kuki
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.