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...

Forex Trade London Open

Jam Pasar Forex Jam Pasar Forex Konverter mensyaratkan jam perdagangan jam dinding lokal pada pukul 8:00 pagi - 4:00 sore di setiap pasar Forex. Liburan tidak termasuk Tidak dimaksudkan untuk digunakan sebagai sumber waktu yang akurat. Jika Anda memerlukan waktu yang tepat, lihat time. gov. Kirimkan pertanyaan, komentar, atau saran ke webmastertimezoneconverter. Cara menggunakan Forex Market Time Converter Pasar forex tersedia untuk trading 24 jam sehari, lima setengah hari per minggu. Konverter Waktu Pasar Forex menampilkan Buka atau Tutup di kolom Status untuk menunjukkan keadaan terkini dari setiap Pusat Pasar global. Namun, hanya karena Anda bisa menukar pasar kapan saja siang atau malam tidak berarti Anda harus melakukannya. Pedagang yang paling sukses mengerti bahwa lebih banyak perdagangan berhasil jika dilakukan saat aktivitas pasar tinggi dan yang terbaik adalah menghindari saat perdagangan ringan. Berikut adalah beberapa tip untuk menggunakan Forex Market Time Converter: Kons...

Pilihan Biner Forex Trading Berita

Didirikan pada tahun 2013, Binary Tribune bertujuan memberikan pembaca liputan berita keuangan yang akurat dan aktual. Situs kami berfokus pada segmen utama di pasar keuangan, mata uang dan komoditas, dan penjelasan mendalam mengenai peristiwa dan indikator ekonomi utama. Pengungkapan Risiko Keuangan BinaryTribune tidak akan bertanggung jawab atas kehilangan uang atau kerusakan yang diakibatkan karena mengandalkan informasi di situs ini. Trading forex, saham dan komoditas pada margin membawa tingkat risiko tinggi dan mungkin tidak sesuai untuk semua investor. Sebelum memutuskan untuk melakukan perdagangan valuta asing Anda harus mempertimbangkan secara hati-hati tujuan investasi, tingkat pengalaman dan selera risiko Anda. Kebijakan Cookie Situs web ini menggunakan cookies untuk memberi Anda pengalaman terbaik dan mengenal Anda lebih baik. Dengan mengunjungi situs web kami dengan browser Anda disetel untuk mengizinkan cookies, Anda menyetujui penggunaan cookie kami seperti yang dijelask...