Konversi dari skrip dari MetaTrader 4 pada NetTradeX Advisors | IFCM Indonesia
IFC Markets - Perdagangan Mata Uang Forex

Konversi dari skrip dari MetaTrader 4 pada NetTradeX Advisors

Pengantar

Sejumlah besar penasihat dan script telah diciptakan untuk MetaTrader 4 trading platformm. Sebelum, orang-orang trader yang ingin menggunakan script ini pada platform NetTradeX, diperlukan sepenuhnya untuk memproses kode sumber, yang mengambil terlalu banyak waktu. Untuk memudahkan tugas ini perpustakaan telah dibuat untuk kompatibilitas MQL4 dan NTL + bahasa. perpustakaan yang mengizinkan menyederhanakan proses konversi dari script ke dalam bahasa NTL + untuk peluncuran berikutnya mereka di terminal NetTradeX Advisors. Karena perbedaan antara MetaTrader dan platform NetTradeX (dan antara bahasa MQL4 dan NTL +), sebagai suatu peraturan, Anda perlu membuat beberapa perubahan kecil dalam skrip yang dikonversi. Bagian utama dari adaptasi dilakukan oleh perpustakaan MQL4.ntl, termasuk dalam terminal NetTradeX Advisors; Namun, pengembang mungkin perlu memodifikasi skrip-nya untuk meluncurkan. Dalam artikel ini akan ditampilkan bagaimana menggunakan fungsi dari perpustakaan itu dan tambahan perubahan apa yang harus dibuat.

Prinsip-prinsip dasar untuk bekerja dengan perpustakaan MQL4.ntl

Jadi, sebelum memulai pekerjaan utama, Anda harus memiliki script sepenuhnya debugged dalam bahasa MQL4. Langkah-langkah apa yang harus diambil dalam rangka untuk mengubah kode ini ke script kerja NTL +?

Langkah 1 - pada awalnya, Anda harus membuat file script baru di Scripts jendela Navigator di terminal NetTradeX Advisors. File itu sendiri harus dalam Advisors folder atau Utilities, tergantung pada tujuannya. Setelah itu, Anda harus menyalin semua teks dari script ke file dalam bahasa MQL4.

Langkah 2 - koneksi MQL4.ntl perpustakaan. Untuk ini, tambahkan baris #include "Libraries\MQL4.ntl" pada awal file Anda. Perlu disebutkan sekaligus bahwa tidak ada kebutuhan untuk mengkompilasi MQL4.ntl perpustakaan itu sendiri dan tidak ada file eksekusi diperlukan dalam fungsi perpustakaan untuk bekerja. perpustakaan yang tidak ditujukan untuk peluncuran independen dan digunakan untuk tujuan tambahan.

Langkah 3 - upaya untuk mengkompilasi script yang dihasilkan. Untuk itu dalam kode editor klik pada tombol Compile atau tekan F7. Kemungkinan besar, compiler akan menampilkan daftar kesalahan dan peringatan bahwa kita akan menghilangkan langkah demi langkah. Sekarang dua saat-saat penting menarik minat kita: apakah compiler telah mendeteksi perpustakaan dan apakah semua fungsi khusus dalam script kita.

Jika compiler tidak akan dapat mendeteksi file dari perpustakaan, pesan "Gagal membuka file script" akan ditampilkan. Dalam hal ini memastikan bahwa MQL4.ntl di jalur yang ditentukan dalam petunjuk #include, dan nama yang tepat ditentukan.

Ada tiga fungsi khusus dalam bahasa MQL4 yang memiliki nama yang telah ditetapkan: init (), mulai (), deinit (). Untuk meluncurkan di terminal NetTradeX Advisors semua fungsi ini harus ditentukan. Namun, dalam beberapa skrip salah satu fungsi atau keduanya, init () dan deinit (), mungkin hilang. Dalam kasus seperti compiler akan memberitahu Anda "Tidak ada tanda tangan yang cocok untuk 'init ()'" atau "Tidak ada tanda tangan yang cocok untuk 'deinit ()'". Dalam hal ini Anda harus menambahkan init () dan deinit () fungsi dengan satu-satunya operator return 0;

int init()
{
	return 0;
}
int deinit()
{
	return 0;
}

Tahap pertama dapat dianggap sebagai berhasil dilakukan, jika pesan "Gagal membuka file script" dan "Tidak ada tanda tangan yang cocok untuk 'init ()'" / "Tidak ada tanda tangan yang cocok untuk 'deinit ()'" yang hilang. Sekarang, kita bisa lolos ke penghapusan masalah lokal.

Memasukkan pesan umum dari compiler, penyebab dan cara eliminasi mereka

Pada bagian ini kami akan menjelaskan pesan umum dari compiler, yang dihasilkan dalam proses adaptasi naskah, dan keputusan praktis akan diberikan untuk menghilangkan ketidakcocokan dalam kode.

Tidak ada tanda tangan yang cocok untuk Cetak

jenis kesalahan ini disebabkan oleh fakta bahwa di NTL + pelaksanaan fungsi dengan jumlah variabel properti tidak diperbolehkan. Dalam hal ini akan diperlukan untuk mengubah fungsi dengan cara sehingga jumlah properti di panggilan tepat sesuai dengan jumlah parameter dalam definisi. Fungsi Print () harus memiliki hanya satu parameter masukan. Dengan cara ini bukan Print (param 1, param 2, param 3) Rangkaian а harus diproduksi - Print(param 1+ param 2+ param 3).

Unexpected token '(unrecognized token)'

Salah satu alasan untuk pesan ini datang adalah upaya untuk menghubungkan file dari perpustakaan bahasa MQL4 melalui arahan #include. bahasa NTL + tidak beroperasi dengan perpustakaan tersebut, itu sebabnya penggunaan file-file ini adalah mustahil dan garis harus dihapus dari program.

'Benar' / 'Salah' tidak dinyatakan

Nama-nama variabel logis dalam FTL mulai dengan huruf kecil, itulah sebabnya hanya mengganti "Benar" dengan "benar" dan "Salah" dengan "false".

Tidak ada konversi dari 'bar' untuk 'int' yang tersedia

Satu Bar variabel dalam MQL4 dimaksudkan untuk menentukan jumlah bar di chart saat ini. Dalam NTL + bahasa terdapat Bar objek homonim, itu sebabnya di perpustakaan MQL4.ntl variabel "bar" (dengan huruf kecil b) ditambahkan, kembali jumlah bar untuk bagan saat. Ini adalah apa yang harus digunakan dalam script Anda bukan Bar.

Harus mengembalikan nilai

Pesan ini ditampilkan ketika operator "kembali" disebut tanpa nilai kembali. Pada saat yang sama, fungsi, di mana operator ini digunakan, dinyatakan dengan berbeda dari void nilai kembali. Saat menampilkan pesan ini, Anda akan perlu baik untuk memperbaiki fungsi itu sendiri atau menentukan nilai untuk return.

Penggunaan nomor Ajaib

Penggunaan nomor Ajaib tidak didukung dalam versi bahasa NTL +. Untuk semua posisi terbuka nilai nol dari angka ajaib dikembalikan. Dalam naskah dalam bahasa MQL4 dianjurkan untuk memberikan perhatian khusus terhadap penggunaan nomor Ajaib di operator kondisional. Seringkali, itu sudah cukup untuk hanya menghapus atau komentar pada fungsi OrderMagicNumber (), jika Anda tidak perlu mengidentifikasi posisi, diproduksi oleh penasihat yang.

Penggunaan variabel statis

Dalam NTL + kata kunci "statis" tidak digunakan. Jika diperlukan untuk menyimpan nilai variabel antara meluncurkan fungsi, variabel tersebut harus dibuat global (tanpa kata kunci statis), menempatkan mereka keluar dari fungsi. Jika diinginkan, Anda dapat menambahkan modifikator sebuah extern, dalam hal sifat ini seharusnya diubah oleh pengguna selama peluncuran atau bekerja dari script.

Menentukan ukuran lot

Dalam versi banyak ukuran saat instrumen apapun adalah 100 000 unit, itu sebabnya jika Anda menggunakan instrumen dengan ukuran lot yang berbeda, tentukan secara terpisah sesuai variabel dan memberikan nilai yang diperlukan dari ukuran lot untuk itu, jika berbeda dari 100 000.

Berbagai jenis pekerjaan dengan file DLL

Bekerja dengan file DLL dilakukan secara berbeda di NetTradeX Advisors dan terminal MetaTrader4. Di dalam MQL4 keterangan lengkap tentang fungsi dari modul DLL yang diperlukan, dan di NTL + deskripsi tersebut tidak diperlukan. Alih-alih menunjukkan

#import "name of file or module"
    Description of function1;
    Description of function2;
    Description of functionN;
#import

Anda hanya harus membuat objek dll random_identifier("name_of_file _or_module "); dan mengaktifkan fungsi yang Anda butuhkan by
identifier.Cal ("name_of_function", parameters_of_functions_ separated by_commas);
or
identifier. CallProc("name_of_function", parameters_of _function _separated_by_commas);

Checking keywords of the language

Di MQL4 dan NTL + ada perbedaan dalam kata kunci. Advisors dalam bahasa MQL4 dapat menggunakan nama variabel atau fungsi, tidak tersedia di NTL bahasa + dan sebaliknya. compiler dapat, misalnya, menampilkan pesan Diharapkan '(' untuk baris di mana penggunaan tanda kurung tidak diharapkan. Salah satu alasan yang mungkin adalah kebetulan nama variabel dengan salah satu kata kunci. Dalam kasus kebetulan seperti itu, diperlukan untuk mengganti nama variabel dengan satu sama lain di semua lokasi di kode program. kunci kombinasi CTRL + H dalam editor berfungsi untuk panggilan cepat Ganti jendela

Nilai float dipotong di konversi implisit ke integer

Peringatan ini menampilkan ketika mencoba untuk menetapkan "mengambang" atau "double" nilai ke "int" variabel. Koreksi ketidakcocokan ini tidak diperlukan untuk meluncurkan script tetapi diinginkan untuk melakukannya. Konversi dari "ganda" untuk "int" dan dari "float" untuk "int" harus dilakukan secara eksplisit. Misalnya, untuk d variabel dari jenis "ganda" itu akan memiliki bentuk int berikut (d).

Tidak ada konversi otomatis dari bool ke int dan sebaliknya

konversi otomatis int i; bool b = true; i=b; mungkin di NHL. Dalam hal pesan "Tidak bisa implisit mengkonversi dari 'bool' untuk 'int'" display. Itu sebabnya jika Anda membutuhkan jenis seperti konversi Anda dapat menggunakan konstruksi berikut:

int Run()
{
	// conversion from bool to int;
	bool a=false;
	int b = a?1:0;
	
	// conversion from int to bool
	int c=1;
	bool d = c==0?false:true;
}
tidak bisa secara implisit mengkonversi dari 'datetime' untuk 'int'

Dalam NTL diperlukan untuk melakukan konversi dari "datetime" objek untuk sebuah "int". variabel. Hal ini dapat dilakukan dengan cara int berikut i; datetime d; i = int (d);

konstanta warna

Di dalam MQL4 sejumlah konstanta dapat digunakan untuk bekerja dengan warna objek primitif grafis. semacam konstanta dapat digantikan untuk setiap dari 16 warna dasar, misalnya, dengan menentukan Putih atau Hitam. Satu-satunya pengecualian adalah penggunaan warna dalam indikator grafis. Jika warna yang tidak diakui oleh NTL + yang digunakan, diperlukan untuk menentukan warna dengan komponen RGB. Misalnya, untuk tomat warna spesifikasi akan seperti ini: color Tomato = 0xFF6347

Bekerja dengan data array

Di MQL4 dan tidak bekerja dengan array data dilakukan secara berbeda. Dalam NTL deklarasi seperti type name[] hanya digunakan untuk array indikator. Untuk menyimpan data lain semua array dideklarasikan dalam bentuk array "type" name; or array "type" name (size). Jadi, bukannya string symb[3] = {"EURUSD", "GBPUSD", "AUDCAD"}; harus digunakan array "string" symb= {"EURUSD", "GBPUSD", "AUDCAD"};

Fungsi yang tidak didukung

fungsi Severael tidak didukung di NTL +. fungsi tersebut harus dihapus atau logika kerja skrip harus diubah dengan cara seperti menggunakan NTL + konstruksi. Dalam kasus menggunakan fungsi tersebut, pesan berikut akan ditampilkan dalam jurnal 'Fungsi ini tidak didukung' atau 'Tidak ada tanda tangan yang cocok untuk function_name'.

Daftar beberapa fungsi yang tidak didukung:

  • SendMail()
  • grup fungsi dalam Array
  • fungsi FileOpenHistory, FileIsLineEnding
  • kelompok fungsi "objects" dan properti obyek
  • untuk mode berikut fungsi MarketInfo mengembalikan nilai nol:
    • MODE_SWAPLONG
    • MODE_SWAPSHORT
    • MODE_STARTING
    • MODE_EXPIRATION
    • MODE_MINLOT
    • MODE_LOTSTEP
    • MODE_SWAPTYPE
    • MODE_PROFITCALCMODE
    • MODE_MARGINCALCMODE
    • MODE_MARGININIT
    • MODE_MARGINHEDGED
    • MODE_FREEZELEVEL
  • operator goto
  • fungsi fungsi untuk review menghitung Indikator kustom iCustom
  • group of functions for working with windows (Window functions), MessageBox
  • TerminalCompany(), TerminalName(), TerminalPath()
  • #property parameters

Ringkasan

Pada artikel ini kita telah memperkenalkan kesulitan khusus, ditemui dalam mengkonversi skrip dari MetaTrader pada NetTradeX. Proses ini jauh disederhanakan oleh MQL4.ntl perpustakaan, disediakan bersama-sama dengan terminal. Keuntungan dari perpustakaan ini adalah kode terbuka secara penuh bahwa pengembang dapat mengubah atau menambahkan pada kebijaksanaan-Nya. Pada gilirannya kami, kami tidak beristirahat pada kemenangan kami dan akan menambahkan fungsi baru dan memperbarui yang sudah ada di perpustakaan untuk memudahkan proses konversi.

Close support
Call to Skype Call to messenger Call to telegram Call to WhatsApp Call Back