Skip to main content

Array Dilewatkan Hanya Dengan Referensi Mt4 Forex


MetaTrader 4 - Contoh Kesalahan Umum dalam Program MQL4 dan Bagaimana Menghindarinya Pendahuluan Beberapa program lama dapat mengembalikan kesalahan pada versi baru kompiler MQL4. Untuk menghindari penyelesaian program yang kritis, kompilator versi sebelumnya menangani banyak kesalahan di lingkungan runtime. Sebagai contoh, pembagian dengan nol atau array di luar jangkauan adalah kesalahan kritis dan biasanya menyebabkan crash aplikasi. Kesalahan seperti itu terjadi hanya di beberapa negara bagian untuk nilai variabel tertentu. Baca artikel ini untuk mengetahui bagaimana menangani kasus tersebut. Kompilator baru dapat mendeteksi sumber kesalahan aktual dan potensial dan memperbaiki kualitas kode. Pada artikel ini, kita membahas kemungkinan kesalahan yang bisa dideteksi saat kompilasi program lama dan cara memperbaikinya. 1 Kompilasi Kesalahan Jika kode program berisi kesalahan. Itu tidak bisa dikompilasi Untuk mengendalikan semua kesalahan sepenuhnya, dianjurkan untuk menggunakan mode kompilasi yang ketat. Yang diatur oleh petunjuk berikut: Modus ini sangat menyederhanakan pemecahan masalah. 1.1. Identifier bertepatan dengan kata yang dicadangkan Jika nama variabel atau fungsi bertepatan dengan salah satu kata yang dicadangkan kompilator akan mengembalikan pesan kesalahan: Gambar 1. Kesalahan tanda dan nama yang tidak terduga diharapkan Untuk memperbaiki kesalahan ini, Anda harus menggunakan nama yang benar dari Variabel atau fungsi 1.2. Karakter khusus dalam nama variabel dan fungsi Jika nama variabel atau fungsi mengandung karakter khusus (,, titik): kompilator mengembalikan pesan kesalahan: Gambar 2. Kesalahan simbol dan tanda titik tak diketahui yang diharapkan Untuk memperbaiki kesalahan ini, Anda harus menggunakan yang benar Fungsi atau nama variabel. 1.3. Kesalahan menggunakan operator switch Pada versi lama kompiler Anda bisa menggunakan nilai dalam ekspresi dan konstanta dari operator switch: Pada compiler baru, konstanta dan ekspresi dari operator switch harus bilangan bulat, jadi kesalahan terjadi saat Anda mencoba menggunakan Seperti konstruksi: Gambar 3. Kesalahan jenis ekspresi beralih ilegal dan ekspresi konstan tidak terpisahkan Dalam kasus tersebut, Anda dapat menggunakan perbandingan eksplisit nilai numerik, misalnya: 1.4. Mengembalikan nilai fungsi Semua fungsi kecuali void harus mengembalikan nilai tipe yang dideklarasikan. Sebagai contoh: Dalam mode kompilasi yang ketat terjadi kesalahan: Gambar 4. Kesalahan tidak semua jalur kontrol mengembalikan nilai Pada mode kompilasi default, kompilator mengembalikan peringatan: Gambar 5. Peringatan tidak semua jalur kontrol mengembalikan nilai Jika nilai kembali dari Fungsi tidak sesuai dengan yang dinyatakan: kesalahan terdeteksi selama kompilasi ketat: Gambar 6. Fungsi kesalahan harus mengembalikan nilai Pada mode kompilasi default, kompilator mengembalikan peringatan: Gambar 7. Kembali peringatan - fungsi harus mengembalikan nilai Untuk memperbaiki Kesalahan, tambahkan operator kembali dengan nilai kembalian dari tipe yang sesuai ke kode fungsi. 1.5. Array dalam argumen fungsi Dalam argumen fungsi, array sekarang hanya dilewati referensi. Dalam mode kompilasi yang ketat, kode ini akan menyebabkan kesalahan: Gambar 8. Skrip kesalahan kompilator dilewati hanya referensi saja Dalam mode kompilasi default, kompilator mengembalikan sebuah peringatan: Gambar 9. Array peringatan kompilator dilewatkan hanya dengan referensi Untuk memperbaiki kesalahan ini, Anda harus Secara eksplisit tentukan bahwa array dilewatkan dengan referensi dengan menambahkan awalan amp sebelum nama array: Perlu dicatat bahwa sekarang array konstan (Waktu terbuka, tinggi, rendah, dekat, volume) tidak dapat dilalui oleh referensi. Sebagai contoh, panggilan berikut: terlepas dari mode kompilasi yang menyebabkan kesalahan: Gambar 10. Kesalahan Buka - variabel konstan tidak dapat dilewatkan sebagai referensi Untuk menghindari kesalahan ini, salin data yang diperlukan dari array konstan: 2. Runtime Error Errors that Terjadi saat eksekusi kode program disebut error runtime. Kesalahan seperti itu biasanya bergantung pada keadaan sebuah program dan dikaitkan dengan nilai variabel yang salah. Misalnya, jika sebuah variabel digunakan sebagai indeks elemen array, nilai negatifnya pasti akan menyebabkan Array out of Range error. 2.1. Array di luar jangkauan Kesalahan ini sering terjadi pada indikator saat mengakses indikator buffer. Fungsi IndicatorCounted () mengembalikan jumlah bar yang tidak berubah sejak panggilan indikator terakhir. Nilai indikator pada bar yang dihitung sebelumnya tidak memerlukan perhitungan ulang, jadi untuk perhitungan lebih cepat Anda hanya perlu mengolah beberapa bar terakhir. Sebagian besar indikator yang menggunakan metode optimasi perhitungan ini terlihat seperti ini: Seringkali kasus countedbars0 ditangani dengan tidak benar (posisi batas awal harus dikurangi dengan nilai sama dengan 1 indeks maksimum relatif terhadap variabel loop). Juga, ingat bahwa pada saat start () fungsi eksekusi kita bisa mengakses elemen array buffer indikator dari 0 ke Bars () -1. Jika Anda perlu bekerja dengan array yang bukan buffer indikator, tingkatkan ukurannya menggunakan fungsi ArrayResize () sesuai dengan ukuran indikator buffer saat ini. Indeks maksimum elemen ke alamat juga dapat diperoleh dengan memanggil ArraySize () dengan salah satu indikator buffer digunakan sebagai argumen. Kesalahan Zero Divide terjadi ketika pembagi dalam operasi pembagian sama dengan nol: Saat Anda menjalankan skrip ini, pesan kesalahan muncul di tab Pakar dan program mati: Gambar 11. Pesan kesalahan nol dibagi Biasanya kesalahan ini terjadi saat Nilai pembagi ditentukan oleh nilai dari data eksternal manapun. Misalnya, jika parameter perdagangan dianalisis, nilai margin yang digunakan sama dengan 0 jika tidak ada perintah terbuka. Contoh lain: jika data yang dianalisis dibaca dari sebuah file, kita tidak bisa menjamin operasi yang benar jika file tersebut tidak tersedia. Jadi Anda harus mempertimbangkan kasus tersebut dan memprosesnya dengan benar. Cara termudah adalah dengan memeriksa pembagi sebelum operasi divisi dan melaporkan nilai parameter yang salah: Ini tidak menyebabkan kesalahan kritis, namun pesan tentang nilai parameter salah muncul dan program mati: Gambar 12. Pesan pembagi yang salah 2.3. Penggunaan 0 bukan NULL untuk karakter saat ini Dalam versi lama compiler 0 (nol) dapat digunakan sebagai argumen dalam fungsi yang memerlukan spesifikasi instrumen keuangan. Misalnya, nilai indikator teknis Moving Average untuk simbol saat ini dapat diminta sebagai berikut: Di kompiler baru Anda harus secara eksplisit menentukan NULL untuk menentukan simbol saat ini: Sebagai tambahan, periode simbol dan bagan saat ini dapat ditentukan dengan menggunakan Simbol () dan Periode () berfungsi. 2.4. String Unicode dan penggunaannya dalam String DLL sekarang diwakili sebagai urutan karakter Unicode. Ingat ini dan gunakan fungsi Windows yang sesuai. Misalnya, saat menggunakan perpustakaan wininet. dll, bukan InternetOpenA () dan InternetOpenUrlA (), Anda harus menghubungi InternetOpenW () dan InternetOpenUrlW (). Struktur internal string telah berubah dalam MQL4 (sekarang dibutuhkan 12 byte), dan struktur MqlString harus digunakan saat mengirimkan string ke DLL: 2.5. Pembagian file Di dalam flag MQL4, FILESHAREWRITE dan FILESHAREREAD yang baru harus secara eksplisit ditentukan untuk penggunaan bersama saat membuka file. Jika bendera tidak ada, file dibuka dalam mode eksklusif dan tidak dapat dibuka oleh orang lain sampai ditutup oleh pengguna yang membukanya. Misalnya, saat bekerja dengan bendera bagan offline, flag harus secara eksplisit ditentukan: 2.6. Konversi Konversi datetime ke datetime ke string sekarang bergantung pada mode kompilasi: Misalnya, mencoba bekerja dengan file yang namanya mengandung titik dua menyebabkan kesalahan. 3. Peringatan Kompilator Peringatan Kompilator bersifat informatif dan bukan pesan kesalahan. Tetapi mereka menunjukkan kemungkinan sumber kesalahan. Kode yang jelas tidak boleh berisi peringatan. 3.1. Nama variabel global dan lokal bertepatan Jika variabel pada tingkat global dan lokal memiliki nama yang mirip: kompilator menampilkan peringatan yang menunjukkan nomor baris dimana variabel global diumumkan: Gambar 13. Deklarasi peringatan menyembunyikan deklarasi global pada baris Untuk memperbaiki Peringatan benar nama variabel global. 3.2. Ketidaksesuaian Jenis Kompilator baru memiliki operasi pengkodean baru. Dalam mode kompilasi yang ketat, kompilator menunjukkan peringatan jika jenis ketidakcocokan: Gambar 14. Peringatan kemungkinan hilangnya data karena konversi tipe dan konversi implisit dari bilangan ke string Dalam contoh ini, kompilator memperingatkan tentang kemungkinan hilangnya keakuratan untuk tipe data yang berbeda yang ditugaskan dan Konversi implisit dari int ke string. Untuk memperbaiki peringatan menggunakan typecasting eksplisit: 3.3. Variabel yang Tidak Digunakan Kehadiran variabel yang tidak digunakan dalam kode program (entitas yang berlebihan) bukanlah kebiasaan yang baik. Laporan variabel tersebut ditampilkan terlepas dari mode kompilasi: Gambar 15. Variabel peringatan tidak digunakan Untuk memperbaikinya, hapus variabel yang tidak terpakai dari kode Anda. Kesimpulan Artikel ini menjelaskan masalah umum yang mungkin terjadi selama kompilasi program lama yang mengandung kesalahan. Dalam semua kasus, disarankan untuk menggunakan mode kompilasi yang ketat untuk debug program. Peringatan: Semua hak atas materi ini dicadangkan oleh MQL5 Ltd. Menyalin atau mencetak ulang dari bahan-bahan ini secara keseluruhan atau sebagian dilarang. Perlu bantuan untuk bekerja dengan array - mt4 Saya bekerja pada EA perdagangan keranjang. Sejauh ini saya telah menulis sebagian besar kode dan saya sampai pada tombol keranjang BUY dan SELL Buttons. Apa yang saya sejauh ini adalah beberapa array untuk membangun tombol dan memberi makan beberapa formula dengan nilai yang dibutuhkan. Sekarang saya memiliki yang berikut: dan lebih banyak array dengan simbol yang berbeda untuk membuat keranjang yang benar untuk pasangan yang tersisa. Di bagian OnChartEvent, saya ingin hal berikut menjadi mungkin: objsymiDoubleToString ((i4), 0) untuk mencocokkan denominasi tombol yang tepat - yang tidak terlalu penting dalam kasus ini. Jika (sparam) obj tombol telah ditekan Ordersend (EURUSDbr.) Di sinilah saya memiliki masalah Pada putaran pertama loop ketika i0, sym0EURUSD - saya dapat membuat nama array untuk dipanggil pada fungsi berikutnya seperti: Sym0quotbquot Cara menggunakan (sym0quotbquot) hasil untuk memanggil array yang benar, dalam hal ini: EURUSDbr. Saya mencoba (symiquotbquot) r untuk mendapatkan yang setara dengan EURUSDbr tapi tidak berhasil. ObjectSetString (. OBJPROPSTATE, false) Saya tahu hal itu dapat dilakukan dengan jika loop untuk menetapkan secara manual array yang akan digunakan pada fungsi ordersend dan kemudian menambahkan 2 array dimensi ke daftar array lainnya. Saya tidak ingin membuat baris tambahan atau susunan tambahan - sisa kode sudah ada di sekitar array saat ini dan sama sekali tidak ingin menulis ulang keseluruhan kode sebelum dipastikan tidak ada cara lain untuk mencapai apa yang saya inginkan. Jika ada fungsi yang ada untuk melakukan apa yang telah saya jelaskan di atas (berharap saya sudah menjelaskannya dengan cukup baik), tolong tunjukkan jalan atau solusi sederhana lainnya untuk kasus ini. Saya sangat menghargai bantuan anda

Comments

Popular posts from this blog

Pilihan Biner Pilihan Mt4 For Mac Gratis

Kami membuat Indikator Probabilistik Forex pertama secara eksklusif untuk opsi biner 3 Langkah Integrasi dengan MT4 amp MT5 Cukup copypaste indikator di Folder Data Anda, Allow Import DLL and Activate. Ex4 amp. ex5 File disertakan Multiple Asset Calibration V4.0 yang baru telah dikalibrasi pada 4 pasangan utama Forex, termasuk 6 pasangan eksotis. Meningkatnya jumlah sinyal yang andal. Pemberitahuan Push Gratis Biarkan Indikator BOSS dijalankan di rumah dan dapatkan pemberitahuan melalui ponsel kapan pun sinyal probabilitas dipicu. Lisensi seumur hidup Dijamin upgrade seumur hidup gratis Tidak ada biaya rutin yang mengganggu Amankan indikator Anda untuk kehidupan Teknologi Jaringan Syaraf Tiruan Anda tidak akan menemukan indikator lain di luar sana yang memprediksi kemungkinan candle berikutnya sedang bullish atau bearish. Tidak ada penundaan, Tidak ada pengecekan 247 Analisis Pasar Global Tidak masalah di mana Anda tinggal atau pasar mana yang ingin Anda jual. Indikator BOSS bekerja se...

Konsisten Dalam Forex Trading

Cara Profit Konsisten dan Terhindar dari MC di Trading Forex. Tulisan ini bermula dari tulisan seorang trader dengan nama akun Facebook Mitra Forex di sebuah grup ZONE DISKUSI amp SHARING BERSAMA CLUB PENGGUNA DEWA SCALPER. Berbagi, diskusi, curhat, berbagi pengalaman dan bertanya, hehehe. Beberapa waktu lalu ane pernah share salah satu akun ane profit 30 dalam 3 minggu, ada yang bilang bahkan sebagian besar bilang angka segitu terlalu kecil, target ane perbulan jauh dibawah itu yaitu 5 perbulan. Dari situ ane jadi inget kata2 guru ane waktu awal-awal mengenal forex sekitar 3-4 tahun yang lalu, guru ane bilang kurang lebih seperti, kalau mau mau di forex dan masih sering MC dan merasa susah untuk profit, sekarang mulailah berfikir realistis Forex itu bisnis, coba turunkan target profitmu sedikit demi sedikit sampai pada titik dimana MC terasa semakin menjauh dan menghilang dari kamu, karena sebenarnya forex itu bisnis yang paling mudah dan bersabarlah karena ekuitas dan kesabaran itu s...

Tutorial Video Trading Forex Online

Forex Education DailyFX Perdagangan Valas Online Trading Trading adalah sebuah perjalanan yang bisa bertahan seumur hidup. Sementara ide lsquobuying rendah, dan penjualan tinggi, rsquo mungkin terdengar cukup sederhana dalam kenyataannya, perdagangan yang menguntungkan jauh lebih sulit daripada hanya membeli ketika harga bergerak turun, atau menjual saat harga bergerak lebih tinggi. Pendidikan Forex traderrsquos dapat melintasi berbagai kondisi pasar dan gaya trading. Di DailyFX Free Online Forex Trading University, kami membahas lebih banyak faktor yang mempengaruhi pergerakan harga di pasar Forex. Wersquove mengorganisir konten tersebut dengan tingkat kesulitan, dimulai pada tahun pertama, dan diakhiri dengan wisuda tahun. Mengklik Morersquo di bagian manapun di bawah ini akan membawa Anda langsung ke kurikulum, dan Anda dapat mengikuti kurikulum hanya dengan mengklik pelajaran lsquonext di bagian bawah setiap artikel. Kurikulum ini dapat memberikan sebagian besar pendidikan forex An...