Hai semua,
Saya tertanya-tanya sama ada mana-mana guru kod mungkin dapat membantu menunjukkan saya ke arah yang betul mengenai yang ini. Saya adalah bertentangan dengan profesional pengaturcaraan, tetapi saya telah menghabiskan berjam-jam pada panel perdagangan yang datang dengan sangat baik, dan saya mengalami beberapa pepijat yang saya tidak dapat memikirkan cara untuk mengatasinya. Siaran ini menangani pepijat pertama. Maaf terlebih dahulu kerana panjang.
Saya menemui dan menggunakan blok kod daripada urutan ini untuk membolehkan saya menambah penunjuk daripada UI tersuai saya sendiri atas permintaan:
https://www.mql5.com/en/forum/73391/page3(siaran #27 oleh Kray). Saya terpaksa membuat tweak kecil dari segi penggunaan Sleep dan arahan keybd, dan secara amnya, ia telah berfungsi. (Perhatikan seperti yang saya akui di bawah, saya adalah seorang penggodaman, jadi jika anda fikir penggunaan arahan ini adalah pendua dan bodoh, saya pasti anda betul -- tetapi apabila saya menemui kombo yang berkesan, saya tidak mahu untuk mengacaukannya, kerana ia sudah rapuh bagi saya.)
Saya di bawah:
Dimasukkan Kod #import user32.dll int GetAncestor(int, int); int RegisterWindowMessageW(string MessageName);/Untuk Start custom indicator int PostMessageW(int hwnd,int msg,int wparam,uchar Name#91;#93;);/For Start custom indicator int FindWindowW(string lpszClass,string lpszWindow);/Untuk penunjuk tersuai Mula/int keybd_event(int bVk, int bScan, int dwFlags, int dwExtraInfo);/Untuk Start custom indicator #import #define VK_RETURN 13/ENTER key#import/Untuk Start custom indicator void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=true)/true = langkau kotak dialog penunjuk { Sleep( 100); nama uchar2#91;#93;; StringToCharArray(Nama Penunjuk,nama2,0,StringLen(Nama Penunjuk)); Cetak(Nama Penunjuk= Nama Penunjuk); Print(ArraySize(nama2)= ArraySize(nama2)); untuk (int i = 0; i lt; ArraySize(nama2); i ){ Print(name2#91; i #93;= name2#91;i#93;); } int MessageNumber=RegisterWindowMessageW(MetaTrader4_I nternal_Message); Tidur(100); int r=PostMessageW(hWnd,Nombor Mesej,15,nama2); Tidur(200); if(AutomaticallyAcceptDefaults) { keybd_event(13, 0, 0, 0); int ind_settings = FindWindowW(NULL, Custom Indicator - IndicatorName); PostMessageW(ind_settings,0x100,VK_RETURN,name2); keybd_event(13, 0, 0, 0); } }
Isu awalnya ialah ia gagal. Saya akan mendapat ralat 'laluan' fail Tidak boleh buka. Ini adalah penyekat pada awalnya tetapi kemudian saya mendapati bahawa jika saya membuat nama fail penunjuk saya tepat 15 aksara, saya telah dinyahsekat. Ini dijalankan secara amnya dengan jayanya selama beberapa hari, mungkin juga seminggu atau dua. Tetapi sekejap-sekejap, saya akan menghadapi masalah di mana penunjuk dan rentetan laluan saya ditafsirkan secara salah oleh perkara yang saya hanya boleh tentukan sebagai fungsi PostMessageW. Apabila gagal, ia melaporkan semula aksara tambahan atau sebaliknya dalam nama fail yang cuba dibuka. Jadi daripada mengatakan Tidak boleh membuka fail 'MyIndies\MyIndicator.ex4', ia akan berkata Tidak boleh membuka fail 'MyIndies\MyIndicator?L .ex4.' Jadi untuk satu atau dua minggu yang baik, biasanya penunjuk akan dimuatkan dengan baik, tetapi sekejap-sekejap laluan dan nama penunjuk saya akan ditafsirkan secara salah. Dalam kes tersebut (mungkin selepas saya menukar bingkai carta, atau mengklik sekitar ke tab lain, atau berada di luar untuk seketika), saya biasanya hanya boleh memuatkan semula templat atau EA saya dan kembali baik. Menariknya, dalam semua kes, pernyataan Cetak saya dalam blok kod di atas sentiasa mengembalikan hasil yang konsisten. Ia adalah konsisten dari segi apabila penunjuk dipanggil dengan jayanya serta apabila berbilang variasi nama fail yang salah ditafsirkan. Saya hanya boleh meneka bahawa ralat berlaku dalam arahan PostMessageW, walaupun saya tidak dapat memaksanya untuk menghasilkan semula ralat atas permintaan, dan saya pastinya tidak tahu mengapa.
Dalam satu atau dua hari terakhir, tiba-tiba saya sentiasa mendapat mesej ralat. Saya dapati melalui beberapa percubaan dan kesilapan bahawa jika saya mengurangkan panjang nama penunjuk saya daripada 15 aksara kepada 14, saya akan kembali baik. 15 adalah sangat jelas nombor ajaib sebelum ini, dan kini nombor ajaib ialah 14. Saya tidak tahu mengapa mana-mana nombor akan menjadi nombor ajaib, apatah lagi mengapa ia telah berubah dengan jelas dan muktamad sejak sehari dua lalu. Saya benar-benar tersekat memahami mana-mana perkara ini dan buta tentang cara bahan Windows API ini berfungsi, dan saya juga seorang yang noob dalam bekerja dengan uchars. Saya telah menghabiskan masa berjam-jam untuk googling dan cuba menyelesaikannya tetapi tidak berjaya.
Jika sesiapa boleh menerangkan perkara ini, membantu saya menyelesaikannya, atau bahkan menunjukkan kepada saya sumber yang boleh saya bantu sendiri, saya amat menghargainya.
Jika anda telah membaca sejauh ini, terima kasih banyak-banyak.
FtN