Saya telah mengalami masalah sejak lewat.
Bagaimanakah saya dapat menangkap kesilapan yang dilemparkan oleh dagangan gagal pada broker ECN?
Saya telah mengalami masalah sejak lewat.
Bagaimanakah saya dapat menangkap kesilapan yang dilemparkan oleh dagangan gagal pada broker ECN?
Ron, Maaf jika saya kehilangan sesuatu, tetapi saya telah menguji produk ini (yang melaksanakan banyak variasi OrderSend (), OrderModify (), OrderClose () dan OrderDelete ()) pada 16 orang yang berbeza, dan saya mendapati bahawa GetLastError () melakukan kerja. Produk ini juga mempunyai pilihan untuk (secara automatik) menambah SLTP sebagai ModifyOrder (), bukan sebahagian daripada OrderSend (), yang sepertinya mendapat sekitar satu masalah yang saya perhatikan. Jika pilihan ini dimatikan, GetLastError () mengembalikan 130 (berhenti tidak sah), dengan sesetengah br0kers. Bolehkah anda menjadi lebih spesifik, misalnya menyediakan pautan ke ECN br0ker yang anda mengalami masalah dengan, dan beberapa info mengenai kesalahan yang terjadi? Saya akan menjalankan beberapa ujian dan melaporkan hasilnya. Terima kasih, DavidOriginally Posted by ;
Hei Hanover, Sejauh yang saya ketahui, salah satu cara Broker ECN mengendalikan pesanan masuk dengan SLTP adalah gagal tanpa kode kesalahan. Saya cuba mencari jalan untuk menangkap ralat ini. Satu kaedah yang saya gunakan adalah untuk memeriksa tiket pesanan. Itu nampaknya tidak berfungsi. Jadi saya mencari alternatif.
Ron, yang mana anda menghadapi masalah? Adakah FXCM? Terima kasih, DavidOriginally Posted by ;
FXCM dan FXDD buat masa sekarang. Saya tidak pasti jika penyelidikan anda di 16 broker telah menunjukkan sebarang corak.Originally Posted by ;
Ron, Jadi apa yang anda katakan ialah GetLastError () mengembalikan 0 walaupun perintah itu tidak diletakkan? Saya mempunyai firasat bahawa kita mungkin telah melakukan perkara yang sama. Tetapi, seperti yang dapat anda lihat (di sini), masalah saya ialah pengguna produk saya sedang mengalami Ralat 130, apabila tetapan yang salah menyebabkan skrip cuba menambah TPSL sebagai sebahagian daripada OrderSend asal (). Jika anda mahu menyiarkan pecahan kod yang menyebabkan masalah (atau masukkannya dalam PM), saya akan melihat. Kadang-kadang orang luar boleh melihat sesuatu yang jelas bahawa programmer entah bagaimana diabaikan. Ia berlaku kepada saya sepanjang masa.Originally Posted by ;
David
Percubaan saya sendiri untuk membuat skrip Broker ECN sejagat. Kesilapan diteruskan ke kod pengendalian ralat dalam fungsi Mula (). Ini bermakna khusus untuk mengesan seorang Broker ECN dan menyesuaikan kelakuannya dengan sewajarnya. Kod dimasukkan ke dalam extern bool ECNBroker = Palsu; int SendOrder (string OpenSymbol, int OpenCommand, double OpenVolume, double OpenPrice, int OpenSlippage, double OpenStopLoss, double OpenTakeProfit, string OpenComment, int OpenMagicNumber, datetime OpenExpiration, color OpenColor) {int FTicket = -2; jika (! ECNBroker) {FTicket = OrderSend (OpenSymbol, OpenCommand, OpenVolume, OpenPrice, OpenSlippage, OpenStopLoss, OpenTakeProfit, OpenComment, OpenMagicNumber, OpenExpiration, OpenColor); jika (FTicket == -1) {return (FTicket); } jika (OrderSelect (FTicket, SELECT_BY_TICKET, MODE_TRADES)) {return (FTicket); } else {ECNBroker = True; }} if (ECNBroker) {FTicket = OrderSend (OpenSymbol, OpenCommand, OpenVolume, OpenPrice, OpenSlippage, 0.0, 0.0, OpenComment, OpenMagicNumber, OpenExpiration, OpenColor); jika (FTicket gt; 0) {OrderSelect (FTicket, SELECT_BY_TICKET, MODE_TRADES); OrderModify (FTicket, OrderOpenPrice (), OpenStopLoss, OpenTakeProfit, OrderExpiration (), CLR_NONE); } kembali (FTicket); }} Ini adalah contoh kod pengendalian kesilapan lain yang terlibat dalam EA saya. Tiket Kod Insert = KirimOrder (Simbol (), OP_SELL, Banyak, Tawaran, Slippage, StopLossLevel, TakeProfitLevel, Menjual (# MagicNumber ), MagicNumber, 0, DeepPink); jika (Tiket gt; 0) {jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {Print (pesanan SELESYAR dibuka:, OrderOpenPrice ()); jika (SignalMail ShortMailSignalBarCount! = Bars) {SendMail (# 91; Isyarat Alert # 93 ;, # 91; Symbol () # 93; DoubleToStr (Bida, Digit) Jual Isyarat); ShortMailSignalBarCount = Bar; } jika (Alerts ShortAlertSignalBarCount! = Bar) {Alert (# 91; Symbol () # 93; DoubleToStr (Tawaran, Digit) Jual Isyarat); ShortAlertSignalBarCount = Bar; } jika (PlaySounds ShortSoundSignalBarCount! = Bar) {PlaySound (alert.wav); ShortSoundSignalBarCount = Bar; } TradesThisBar ; } else {Print (Error opening SELL order:, GetLastError ()); }}
Ron, Hanya melihat fragmen kod pertama anda ....... Ia menganggap bahawa br0ker adalah bukan ECN, dan kemudian membuat pesanan dengan (kononnya) SLTP bukan sifar. Sekiranya OrderSend () gagal, ia akan mengembalikan FTicket = -1. Ujian seterusnya anda mengatakan bahawa jika FTicket == -1, maka hanya kembali (FTicket), keluar dari fungsi. Oleh itu, ia tidak akan mendapat ujian jika (ECNBroker) ....., dan tidak akan mempunyai peluang untuk membuat pesanan. Hanya meneka, tetapi adakah masalah itu? DavidOriginally Posted by ;
Saya fikir juga, kecuali ketika saya menjalankan cetakan Print () berfungsi di bahagian ECN kedua, EA masih berjalan melalui bahagian itu, jadi blok kod ini mengubah nilai ECNBroker dari Salah ke Benar. Sekiranya nilai tiket yang diluluskan sebagai hasil daripada fungsi ialah -1, seharusnya ada panggilan 'mendapatkan ralat terakhir' pada akhir blok kedua kod. Tiada panggilan ralat berlaku. Mungkin tiket -1 dikembalikan hanyalah ralat generik?
Itu sangat pelik. Dokumen MetaQuotes pada OrderSend () mengatakan bahawa ia mengembalikan nombor tiket yang diberikan kepada pesanan oleh pelayan perdagangan atau -1 jika gagal. Untuk mendapatkan maklumat ralat tambahan, seseorang perlu memanggil fungsi GetLastError (). Itulah cara saya selalu faham untuk berfungsi, iaitu, APA kegagalan menyebabkan nilai -1 dikembalikan. Dalam EA yang saya tulis sendiri, MT4 tidak pernah memberi saya sebarang alasan untuk mempercayai sebaliknya. Saya tidak pasti bahawa ia adalah mungkin untuk menguji untuk ECN br0ker. Jika OrderSend () mengembalikan -1 adalah generik, maka ini hanya boleh berlaku sebagai hasil dari sebarang kesilapan. Walaupun menggunakan GetLastError () mungkin tidak cukup spesifik, kerana memanggil OrderSend () dengan TP atau SL yang tidak sifar nampaknya mengembalikan Ralat 130 (berhenti tidak sah), yang juga boleh berlaku untuk sebab selain ECN yang menjadi pengganti. Maaf saya tidak boleh lebih membantu. DavidOriginally Posted by ;