Ini akan menjadi jawatan panjang dengan banyak baris kod ...
Saya mempunyai kod yang sedia ada yang berfungsi seperti yang dimaksudkan yang mengambil pelbagai posisi dan menutup pada tahap SL dan TP tersembunyi.
Saya mahu menambah fungsi kod yang sedia ada yang membolehkan EA ditutup dan terbalik jika isyarat dijana sebelum SL atau TP dilanda.
Inilah kod yang sedia ada yang berfungsi dengan baik:
Kod dimasukkan/---------------------------------------------- ----/PARAMETERS TRADING/---------------------------------------- ---------- RefreshRates (); {if (CUSTOM TRADING SIGNAL FOR BUY) {if ((Hour () == 0) (Minute () == 0)) Sleep (60000); {fBuy1 (); fBuy2 (); fBuy3 (); fBuy4 (); fBuy5 (); fBuy6 (); }} if (SIGNAL TRADING CUSTOM FOR SELL) {if ((Hour () == 0) (Minute () == 0)) Sleep (60000); {fSell1 (); fSell2 (); fSell3 (); fSell4 (); fSell5 (); fSell6 (); }}}}/-------------------------------------------- ------/BELI/--------------------------------------- ----------- void fBuy1 () {int result = OrderSend (ST1, OP_BUY, Many, Ask, Slippage, 0,0, Open LONG Magic1, Magic1,0, Blue); OrderSelect (hasil, SELECT_BY_TICKET, MODE_TRADES); Cetak (BUY ORDER OPENED !, #, result, at, DoubleToStr (OrderOpenPrice (Digits),, SL:, DoubleToStr (OrderStopLoss (), Digits),, TP:, DoubleToStr (OrderTakeProfit (), Digits), OpenTrades :, OrdersTotal (),, Tutup # 91; 1 # 93 ;:, Tutup # 91; 1 # 93;); jika (SignalMail) SendMail (BORANG PERDAGANGAN BUKA !, BUAH ORDER OPENED! ST1 , # result at DoubleToStr (OrderOpenPrice (), Digit) , SL: DoubleToStr (OrderStopLoss (), Digit) : DoubleToStr (OrderTakeProfit (), Digit)); jika (hasil == -1) {int e = GetLastError (); Cetak (e); }} void fBuy2 () {int result = OrderSend (ST1, OP_BUY, Many, Ask, Slippage, 0,0, Open LONG Magic2, Magic2,0, Blue); OrderSelect (hasil, SELECT_BY_TICKET, MODE_TRADES); Cetak (BUY ORDER OPENED !, #, result, at, DoubleToStr (OrderOpenPrice (Digits),, SL:, DoubleToStr (OrderStopLoss (), Digits),, TP:, DoubleToStr (OrderTakeProfit (), Digits), OpenTrades :, OrdersTotal (),, Tutup # 91; 1 # 93 ;:, Tutup # 91; 1 # 93;); jika (SignalMail) SendMail (BORANG PERDAGANGAN BUKA !, BUAH ORDER OPENED! ST1 , # result at DoubleToStr (OrderOpenPrice (), Digit) , SL: DoubleToStr (OrderStopLoss (), Digit) : DoubleToStr (OrderTakeProfit (), Digit)); jika (hasil == -1) {int e = GetLastError (); Cetak (e); }} Dll ... kod ulang terus menerus melalui VoidfBuy6/------------------------------------- -------------/SELL/-------------------------------- ------------------ void fSell1 () {int result = OrderSend (ST1, OP_SELL, Lot, Bidaan, Slippage, 0,0, Open SHORT Magic1, Magic1,0, Merah); OrderSelect (hasil, SELECT_BY_TICKET, MODE_TRADES); Cetak (ORDER DIBAYAR !, #, hasil, pada, DoubleToStr (OrderOpenPrice (), Digit),, SL:, DoubleToStr (OrderStopLoss (), Digit),, TP:, DoubleToStr (OrderTakeProfit (), Digit), OpenTrades :, OrdersTotal (),, Tutup # 91; 1 # 93 ;:, Tutup # 91; 1 # 93;); (SignalMail) SendMail (EA OPEN TRADE ALERT !, SELL ORDER OPENED! ST1 , # result at DoubleToStr (OrderOpenPrice (), Digits) , SL: DoubleToStr (OrderStopLoss (), Digits) , TP : DoubleToStr (OrderTakeProfit (), Digit)); jika (hasil == -1) {int e = GetLastError (); Cetak (e); }} void fSell2 () {int result = OrderSend (ST1, OP_SELL, Lot, Bidaan, Slippage, 0,0, Open SHORT Magic2, Magic2,0, Red); OrderSelect (hasil, SELECT_BY_TICKET,MODE_TRADES); Cetak (ORDER DIBAYAR !, #, hasil, pada, DoubleToStr (OrderOpenPrice (), Digit),, SL:, DoubleToStr (OrderStopLoss (), Digit),, TP:, DoubleToStr (OrderTakeProfit (), Digit), OpenTrades :, OrdersTotal (),, Tutup # 91; 1 # 93 ;:, Tutup # 91; 1 # 93;); (SignalMail) SendMail (EA OPEN TRADE ALERT !, SELL ORDER OPENED! ST1 , # result at DoubleToStr (OrderOpenPrice (), Digits) , SL: DoubleToStr (OrderStopLoss (), Digits) , TP : DoubleToStr (OrderTakeProfit (), Digit)); jika (hasil == -1) {int e = GetLastError (); Cetak (e); }} void fSell3 () {int result = OrderSend (ST1, OP_SELL, Lot, Bidaan, Slippage, 0,0, Open SHORT Magic3, Magic3,0, Red); OrderSelect (hasil, SELECT_BY_TICKET, MODE_TRADES); Cetak (ORDER DIBAYAR !, #, hasil, pada, DoubleToStr (OrderOpenPrice (), Digit),, SL:, DoubleToStr (OrderStopLoss (), Digit),, TP:, DoubleToStr (OrderTakeProfit (), Digit), OpenTrades :, OrdersTotal (),, Tutup # 91; 1 # 93 ;:, Tutup # 91; 1 # 93;); (SignalMail) SendMail (EA OPEN TRADE ALERT !, SELL ORDER OPENED! ST1 , # result at DoubleToStr (OrderOpenPrice (), Digits) , SL: DoubleToStr (OrderStopLoss (), Digits) , TP : DoubleToStr (OrderTakeProfit (), Digit)); jika (hasil == -1) {int e = GetLastError (); Cetak (e); }} Dll ... kod ulang diteruskan melalui VoidfSell6/------------------------------------- -------------/HIDDEN SL FUNGSI TP/----------------------------- --------------------- void hidden_stop_loss () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); bool result = false; {if (OrderMagicNumber () == Magic1) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Simbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort1) (), Ask, 50, Merah); } jika (OrderMagicNumber () == Magic2) {if (OrderType () == OP_BUY iClose (Simbol (), 1,0) lt; )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Simbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort2) (), Ask, 50, Merah); } if (OrderMagicNumber () == Magic3) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () ((OrderOpenPrice ()100) * StopLossShort3) (), Ask, 50, Merah); } Dll ... kod ulangberterusan melalui Magic6}} kembali; } void hidden_take_profit () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); bool result = false; {if (OrderMagicNumber () == Magic1) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) (), Ask, 50, Merah); } if (OrderMagicNumber () == Magic2) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) (), Ask, 50, Merah); } jika (OrderMagicNumber () == Magic3) {if (OrderType () == OP_BUY iClose (Symbol (), 1,0) gt; NormalizeDouble (OrderOpenPrice () )) hasil = OrderClose (OrderTicket (), OrderLots (), Tawaran, 50, Merah); jika (OrderType () == OP_SELL iClose (Symbol (), 1,0) lt; NormalizeDouble (OrderOpenPrice () - ((OrderOpenPrice ()100) (), Ask, 50, Merah); } Dll ... kod ulang diteruskan melalui Magic6}} kembali; }
Kerja-kerja di atas berfungsi dengan baik tetapi saya ingin menambah dekat jika isyarat bertentangan dan fungsi terbalik ...
Walaupun EA memasuki dengan banyak nombor sihir dan keluar SLs dan TP yang tersembunyi dengan nombor sihir yang banyak, saya ingin keluar dari semua posisi terbuka jika isyarat bertentangan sebaliknya dihasilkan sebelum SL atau TP dilanda, dan saya mahu membalikkan dan membuka siri baru kedudukan yang bertentangan.
Inilah yang saya cuba setakat ini tetapi tidak berfungsi seperti yang diharapkan ... apa-apa idea lain? Saya ingin menggunakan rangka kerja sedia ada ... Apa yang saya buat salah di sini?
Kod Insert {if (SIGNAL CUSTOM TRADING FOR BUY) {if ((Hour () == 0) (Minute () == 0)) Sleep (60000); {CloseSell (); lt; lt; ----- Ini telah ditambah berfikir ia akan berfungsi secara logik ... logik tambahan di bawah Tidur (10000); lt; lt; ----- ditambahkan untuk memberi penampan untuk menutup kedudukan sedia ada sebelum melaksanakan yang baru tidak menganggap ia mempengaruhi keluar fBuy1 (); fBuy2 (); fBuy3 (); fBuy4 (); fBuy5 (); fBuy6 (); } dan lain-lain... /------------------------------------------- -------/TUTUP FUNGSI ADA SEBELUM fOpenPostions/---------------------------------- ---------------- void CloseSell () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); bool result = false; {if (OrderType () == OP_SELL) {result = OrderClose (OrderTicket (), OrderLots (), Ask, 50, Red); }}}} tidak sah CloseBuy () {int totalorders = OrdersTotal (); untuk (int i = totalorders-1; igt; = 0; i--) {OrderSelect (i, SELECT_BY_POS); bool result = false; {if (OrderType () == OP_BUY) {result = OrderClose (OrderTicket (), OrderLots (), Bid, 50, Merah); }}}/return; }
Kod tambahan tidak berfungsi seperti yang saya fikirkan. Sebarang penyelesaian lain?