Bantu Dengan Memahami Kod Kesilapan dalam MT4
Results 1 to 9 of 9

Thread: Bantu Dengan Memahami Kod Kesilapan dalam MT4

  1. #1
    Dalam tester, saya mendapat Kod Ralat 0 kesilapan dalaman pada BUY perintah sisi SAHAJA dan tidak menjual pesanan sampingan.

    2 soalan:

    1. Apakah ralat dalaman yang terikat pada Kod ralat 0 yang saya fikir tidak ada kesilapan?

    2. Mengapakah saya mendapat kesilapan ini hanya pada pesanan sebelah beli?

    Hasil khusus yang dicetak adalah: Ralat Semasa Mengubah Henti dan TP Pesanan Beli !!! Kod ralat: 0 ralat dalaman
    yang sepadan dengan modifikasi pertama. Setakat yang saya boleh katakan kod sebelah beli adalah betul.
    Berikut adalah kod yang digunakan untuk fungsi di bawah ... kod mungkin kelihatan reduny, namun ia direka untuk memastikan berhenti keras dan tps keras dihantar dan diposkan selepas pesanan telah diisi untuk broker jenis ecnstp.


    Kod yang dimasukkan tidak sah set_stop_tp () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {if (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_SECONDS), CHECK CHECK gt ;, __FUNCTION__, !! !!!, Error code =, GetLastError ()); } hasil int; cek int; {//Modify Stop and TP on Server jika tidak semasa Entry Order jika (((OrderStopLoss () == 0) || (OrderTakeProfit () == 0)) (OrdersTotal () gt; 0) (UseHardStop == true) ) {RefreshRates ();/Modify both SL and TP jika kedua-duanya belum ditetapkan jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) ) == 0))) hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderOpenPrice () HardTP, 0,0); cek = GetLastError (); jika (semak! = 0) {Print (Ralat Semasa Memodifikasi Henti dan Pesanan Beli !!!) Kod ralat:, GetLastError (),, ErrorDescription (periksa)); } if ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderOpenPrice () - HardTP, 0,0); cek = GetLastError (); jika (semak! = 0) {Cetak (Ralat Semasa Mengubah Henti dan TP Pelelihan! Kod ralat:, GetLastError (),, ErrorDescription (semak)); }/Ubah suai TP hanya jika tidak ditetapkan jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () = 0))) hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss (), OrderOpenPrice () HardTP, 0,0); cek = GetLastError (); jika (semak! = 0) {Cetak (Ralat Semasa Memodifikasi TP Pesanan Beli !!!) Kod ralat:, GetLastError (),, ErrorDescription (periksa)); } jika ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss ()! = 0) (OrderTakeProfit () == 0) OrderTicket (), OrderOpenPrice (), OrderStopLoss (), OrderOpenPrice () - HardTP, 0,0); cek = GetLastError (); jika (semak! = 0) {Cetak (Ralat semasa Mengubah TP Runtuhan! Kod ralat:, GetLastError (),, ErrorDescription (periksa)); }/Ubah suar SL hanya jika tidak ditetapkan jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit ()! = 0))) hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderTakeProfit (), 0,0); cek = GetLastError (); jika (semak! = 0) {Print (Ralat Semasa Mengubah Henti Pesanan Beli !!!) Kod Ralat:, GetLastError (),, ErrorDescription (periksa)); } if ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit () OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderTakeProfit (), 0,0); cek = GetLastError (); jika (semak! = 0) {Print (Ralat Semasa Mengubah Henti Rugi Pesanan !!! code error:, GetLastError (),, ErrorDescription (check)); }}

    Kod Reposted Outside ofjustgetforexCode Box:
    *******************************

    void set_stop_tp ()
    {
    int totalorders = OrdersTotal ();
    untuk (int i = totalorders-1; igt; = 0; i--)
    {
    jika (! OrderSelect (i, SELECT_BY_POS)) {
    Cetak (TimeToStr (TimeCurrent (), TIME_SECONDS), CHECK CHECK gt;, __FUNCTION__, !!!!!, Error code =, GetLastError ()); }
    hasil int;
    cek int;
    {

    //Ubah Henti dan TP pada Pelayan jika tidak semasa Entry Masuk
    jika (((OrderStopLoss () == 0) || (OrderTakeProfit () == 0)) (OrdersTotal () gt; 0) (UseHardStop == true)) {RefreshRates ();
    //Ubah suai SL dan TP jika kedua-duanya belum ditetapkan
    jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit () == 0)))
    result = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderOpenPrice () HardTP, 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Print (Ralat Semasa Memodifikasi Henti dan Pesanan Beli !!!) Kod ralat:, GetLastError (),, ErrorDescription (periksa)); }

    jika ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit () == 0)
    result = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderOpenPrice () - HardTP, 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Cetak (Ralat Semasa Mengubah Henti dan TP Pelelihan! Kod ralat:, GetLastError (),, ErrorDescription (semak)); }

    //Ubahsuai TP hanya jika belum ditetapkan
    jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss ()! = 0) (OrderTakeProfit () == 0)))
    result = OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss (), OrderOpenPrice () HardTP, 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Cetak (Ralat Semasa Memodifikasi TP Pesanan Beli !!!) Kod ralat:, GetLastError (),, ErrorDescription (periksa)); }

    jika ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss ()! = 0) (OrderTakeProfit () == 0)))
    result = OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss (), OrderOpenPrice () - HardTP, 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Cetak (Ralat semasa Mengubah TP Runtuhan! Kod ralat:, GetLastError (),, ErrorDescription (periksa)); }

    //Modify SL hanya jika belum ditetapkan lagi
    jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit ()
    hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderTakeProfit (), 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Print (Ralat Semasa Mengubah Henti Pesanan Beli !!!) Kod Ralat:, GetLastError (),, ErrorDescription (periksa)); }

    jika ((OrderType () == OP_SELL) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) (OrderTakeProfit ()
    hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderTakeProfit (), 0,0);
    cek = GetLastError ();
    jika (semak! = 0) {Print (Ralat Semasa Mengubah Henti Rugi Pesanan !!! code error:, GetLastError (),, ErrorDescription (check)); }
    }

  2. #2
    Saya tidak boleh bercakap untuk orang lain, mungkin kerana saya mempunyai skrin komputer kecil. Tetapi bagi saya, cuba membaca kod anda memerlukan banyak menatal dari kiri ke kanan dan kembali lagi. Dengan mempunyai skrol, saya tidak boleh mengikuti kod. Adakah sesiapa pun mempunyai masalah ini?

  3. #3

    Quote Originally Posted by ;
    Saya tidak boleh bercakap untuk orang lain, mungkin kerana saya mempunyai skrin komputer kecil. Tetapi bagi saya, cuba membaca kod anda memerlukan banyak menatal dari kiri ke kanan dan kembali lagi. Dengan mempunyai skrol, saya tidak boleh mengikuti kod. Adakah sesiapa pun mempunyai masalah ini?
    Saya fikir ia masalah dengan kotak kod FF. Saya ada masalah yang sama. Akan pos lagi di atas.

  4. #4
    kadang-kadang kod logik adalah pelik ... MT4 sangat pelik kadang-kadang ... Saya menukar satu baris kod dan menghapuskan baris yang berlebihan dan ia menghasilkan ralat lebih banyak kali ... Saya menukar baris kod yang sama dan KEPT baris-baris yang berlebihan dan membeli kesilapan sampingan hilang. void set_stop_tp () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {if (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_ SECONDS), CHECK CHECK Gt ;, __FUNCTION__, !!!!, Error code =, GetLastError ()); } hasil int; int check = GetLastError (); ------ gt; gt; gt; gt; menukar dan tambah = to GetLastError () {//Modify Stop and TP on Server jika tidak semasa Entry Order jika (((OrderStopLoss () == 0) || (OrderTakeProfit () == 0)) (OrdersTotal () ; 0) (UseHardStop == true)) {RefreshRates ();/Modify both SL and TP jika kedua-duanya belum ditetapkan jika ((OrderType () == OP_BUY) (OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) ((OrderStopLoss () == 0) ) == 0))) hasil = OrderModify (OrderTicket (), OrderOpen Price (), OrderOpenPrice () - HardStop, OrderOpenPrice () HardTP, 0, 0); cek = GetLastError (); ------- gt; gt; gt; gt; Teruskan redundant = to GetLastErrors () pada semua modifikasi jika (periksa! = 0) {Print (Ralat Semasa Mengubah Henti dan TP Pesanan Beli !!!) Kod Ralat:, GetLastError (),, ErrorDescription (periksa)); } kod ralat pada sisi beli hanya hilang, tidak pasti mengapa reduny diperlukan tetapi berfungsi dengan baik sekarang.

  5. #5

    Quote Originally Posted by ;
    kadang-kadang kod logik adalah pelik ... MT4 sangat pelik kadang-kadang ... Saya menukar satu baris kod dan menghapuskan baris yang berlebihan dan ia menghasilkan ralat lebih banyak kali ... Saya menukar baris kod yang sama dan KEPT baris-baris yang berlebihan dan membeli kesilapan sampingan hilang. void set_stop_tp () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {if (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_ SECONDS), CHECK CHECK Gt ;, __FUNCTION__, !!!!, Error code =, GetLastError ()); } hasil int; int check = GetLastError (); ...
    Pakar psikologi - Sayangnya anda tidak menyiarkan fungsi keseluruhan jadi saya tidak pasti kenapa anda mempunyai pendakap kerinting terbuka ini di sini: jika (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_SECONDS), CHECK CHECK gt;, __FUNCTION__, !!!!!, Error code =, GetLastError ()); } hasil int; cek int; {selain dari beberapa reduny dengan menggunakan blok ini beberapa kali: OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) anda tidak menentukan sama ada berhenti sedang ditetapkan, saya mengesyaki mereka tidak. Saya akan menambah maklumat tambahan kepada pernyataan Cetak () yang bukan sahaja dari keadaan yang berlainan yang terjadi ralat tetapi apa hasil penghentian yang anda telah dihitung: sebagai contoh, apakah hasil dari OrderOpenPrice () HardTP jika HardTP sama dengan 50 misalnya dan OrderOpenPrice () = 1.536 hasilnya akan menjadi 51.536

  6. #6
    Saya telah menyunting kod anda untuk memudahkan membaca (untuk saya sekurang-kurangnya) Kod yang dimasukkan tidak sah set_stop_tp () {int check; int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {if (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_SECONDS), CHECK CHECK gt ;, __ FUNCTION__, !! !!!, Error code =, GetLastError ()); } else if (OrderSymbol () == Trade) {//Modify Stop and TP on Server if not during Entry Order if ((OrderStopLoss () == 0 || OrderTakeProfit () == 0) UseHardStop) {//Modify both SL dan TP jika kedua-duanya tidak ditetapkan lagi (OrderType () == OP_BUY OrderStopLoss () == 0 OrderTakeProfit () == 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, ) HardTP, 0,0)) {check = GetLastError (); Cetak (Ralat Semasa Mengubah Henti dan TP Pesanan Beli !!!) Kod Ralat:, semak,, ErrorDescription (semak)); } jika (OrderType () == OP_SELL OrderStopLoss () == 0 OrderTakeProfit () == 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderOpenPrice () )) {check = GetLastError (); Cetak (Ralat Semasa Mengubah Henti dan TP Jual Beli!) Kod ralat:, semak,, RalatDeskripsi (semak)); }/Ubahsuai TP hanya jika tidak ditetapkan jika (OrderType () == OP_BUY OrderStopLoss ()! = 0 OrderTakeProfit () == 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss () ) HardTP, 0,0)) {check = GetLastError (); Cetak (Ralat Semasa Memodifikasi TP Pesanan Beli !!!) Kod ralat:, semak,, RalatDeskripsi (semak)); } jika (OrderType () == OP_SELL OrderStopLoss ()! = 0 OrderTakeProfit () == 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderStopLoss (), OrderOpenPrice () - HardTP, 0,0) {check = GetLastError (); Cetak (Ralat semasa Mengubah TP Tata Rugi !!! Kod ralat:, periksa,, ErrorDescription (periksa)); }/Modify SL hanya jika belum ditetapkan jika (OrderType () == OP_BUY OrderStopLoss () == 0 OrderTakeProfit ()! = 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderTakeProfit (), 0,0)) {check = GetLastError (); Cetak (Ralat Semasa Mengubah Henti Pesanan Beli !!!) Kod Ralat:, periksa,, RalatDeskripsi (semak)); } jika (OrderType () == OP_SELL OrderStopLoss () == 0 OrderTakeProfit ()! = 0) jika (! OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () HardStop, OrderTakeProfit () {check = GetLastError (); Cetak (Ralat Semasa Mengubah Henti Jual Beli !!!Kod ralat:, semak,, RalatDeskripsi (semak)); }}}}} Sebagai cyber1 disebutkan tidak perlu pemeriksaan OrdersTotalgt; 0 sebagai loop tidak akan dilaksanakan jika tidak ada perintah terbuka. Saya telah memindahkan OrderSymbol () == Perdagangan kerana ia hanya perlu diperiksa sekali. Anda menggunakan hasil = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () - HardStop, OrderOpenPrice () HardTP, 0,0); tetapi anda tidak semestinya menyemak nilai. Kesilapan terakhir mungkin dari elswhere dalam kod anda kerana ia tidak bergantung kepada sama ada modifikasi gagal atau tidak. Juga dalam cetakan anda, anda menggunakan GetLastError (). Apabila cek = GetLastError (); dieksekusi, GetLastError () diset semula ke 0. Ini bermakna kod ralat akan dicetak sebagai 0, tidak kira apa ralatnya. Saya telah mengubah suai cetak untuk menggunakan cek bukan GetLastError () Perhatikan bahawa saya telah mengubah suai kod untuk memeriksa ralat hanya jika OrderModify Gagal

  7. #7

    Quote Originally Posted by ;
    {quote} - Malangnya, anda tidak menyiarkan keseluruhan fungsi itu, jadi saya tidak pasti mengapa anda mempunyai pendakap kerinting terbuka ini di sini: jika (! OrderSelect (i, SELECT_BY_POS)) {Print (TimeToStr (TimeCurrent (), TIME_SECONDS) CHECK CHECK Gt;, __FUNCTION__, !!!!!, Error code =, GetLastError ()); } hasil int; cek int; {selain dari beberapa reduny dengan menggunakan blok ini beberapa kali: OrdersTotal () gt; 0) (OrderSymbol () == Perdagangan) anda tidak menentukan sama ada berhenti sedang ditetapkan, saya mengesyaki mereka tidak. Saya akan menambah maklumat tambahan ...
    Terima kasih ... pendakap terbuka ditutup kemudian, saya tidak menunjukkan fungsi risiko yang lain kerana beberapa algos lain yang berkaitan dengannya adalah proprietari. Saya tidak menguji dengan mengeluarkan OrdersTotal yang berlebihan () gt; 0) (OrderSymbol () == Perdagangan) seperti yang anda dan Gumrai telah mencadangkan, bagaimanapun, seperti yang saya katakan tadi ia menguji dengan sempurna sekarang walaupun dengan OrdersTotal berlebihan () gt; 0) (OrderSymbol () == Perdagangan) Setakat nilai untuk HardTP, HardSL, mereka baik-baik saja. Terima kasih.

  8. #8

    Quote Originally Posted by ;
    Saya telah menyunting kod anda untuk memudahkan membaca (untuk saya sekurang-kurangnya)
    Saya tidak menguji dengan mengeluarkan OrdersTotal yang berlebihan () gt; 0) (OrderSymbol () == Perdagangan) seperti yang anda dan Cyber1 telah mencadangkan, bagaimanapun, seperti yang saya katakan tadi ia menguji dengan sempurna sekarang walaupun dengan OrdersTotal berlebihan () gt; 0) (OrderSymbol () == Perdagangan) Setakat nilai untuk HardTP, HardSL, mereka baik-baik saja. Terima kasih.

  9. #9

    Quote Originally Posted by ;
    Juga dalam cetakan anda, anda menggunakan GetLastError (). Apabila cek = GetLastError (); dieksekusi, GetLastError () diset semula ke 0. Ini bermakna kod ralat akan dicetak sebagai 0, tidak kira apa ralatnya. Saya telah mengubah suai cetak untuk menggunakan cek bukan GetLastError () Perhatikan bahawa saya telah mengubah suai kod untuk memeriksa ralat hanya jika OrderModify Gagal
    Itu mungkin sebahagian daripada masalah asal. Terima kasih.

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.