Hai Guys Saya akan menghargai bantuan anda, tolong?!
Berikut ialah isunya: Saya ingin menutup sebahagian kedudukan saya apabila stok cepat mencapai terlebih jual atau terlebih beli dan biarkan kedudukan selebihnya ditutup secara manual. Nampaknya kerja mudah, tetapi!!! Selepas mencapai tahap, EA menutup satu lot dan betul-betul selepas lot kedua. Bagaimanakah cara saya menghentikannya daripada menutup bahagian kedua?
Terima kasih terlebih dahulu,
Avoleoo
Saya telah menukar OrderLots() kepada 0.01 sebagai contoh dan mari kita anggap saya akan memasuki pasaran dengan 0.02
inilah kodnya:
// ------------------------------------------------ -------------------
//| MQL ini dijana oleh Expert Advisor Builder |
//|
http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/|
//| |
//| Walau apa pun, pengarang tidak akan bertanggungjawab untuk sebarang kerosakan. |
//| Gunakan atas risiko anda sendiri. |
//| |
// -------------------- JANGAN KELUARKAN TAJUK INI ---------------------
#define SIGNAL_TIADA 0
#define SIGNAL_BELI 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright Pembina Penasihat Pakar
pautan #property http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/
extern int MagicNumber = 0;
extern bool SignalMail = Palsu;
extern bool EachTickMode = Benar;
Lot berganda luaran = 0.01;
extern int Slippage = 3;
extern bool UseStopLoss = Palsu;
extern int StopLoss = 30;
extern bool UseTakeProfit = Palsu;
extern int TakeProfit = 60;
extern bool UseTrailingStop = Palsu;
extern int TrailingStop = 30;
int BarCount;
int Semasa;
bool TickCheck = Salah;
// ------------------------------------------------ -------------------
//| fungsi permulaan pakar |
// ------------------------------------------------ -------------------
int init() {
BarCount = Bar;
jika (EachTickMode) Semasa = 0; lain Semasa = 1;
return(0);
}
// ------------------------------------------------ -------------------
//| fungsi penyahinisian pakar |
// ------------------------------------------------ -------------------
int deinit() {
return(0);
}
// ------------------------------------------------ -------------------
//| fungsi permulaan pakar |
// ------------------------------------------------ -------------------
int mula() {
int Pesanan = SIGNAL_TIADA;
int Jumlah, Tiket;
berganda StopLossLevel, TakeProfitLevel;
jika (EachTickMode Bars != BarCount) TickCheck = False;
Jumlah = Jumlah Pesanan();
Pesanan = SIGNAL_TIADA;
// ------------------------------------------------ -------------------
//| Pembolehubah Mula |
// ------------------------------------------------ -------------------
double CloseBuy1_1 = iStochastic(NULL, 0, 8, 5, 5, MODE_SMA, 0, MODE_MAIN, Semasa 0);
dua kali CloseBuy1_2 = 80;
double CloseSell1_1 = iStochastic(NULL, 0, 8, 5, 5, MODE_SMA, 0, MODE_MAIN, Semasa 0);
ganda CloseSell1_2 = 20;
// ------------------------------------------------ -------------------
//| Pembolehubah Akhir |
// ------------------------------------------------ -------------------
//Periksa kedudukan
bool IsTrade = Palsu;
untuk (int i = 0; i lt; Jumlah; i ) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() lt;= OP_SELL OrderSymbol() == Simbol()) {
IsTrade = Benar;
if(OrderType() == OP_BELI) {
//Tutup
// ------------------------------------------------ -------------------
//| Isyarat Mula(Keluar Beli) |
// ------------------------------------------------ -------------------
jika (CloseBuy1_1 gt;= CloseBuy1_2) Pesanan = SIGNAL_CLOSEBUY;
// ------------------------------------------------ -------------------
//| Isyarat Tamat(Keluar Beli) |
// ------------------------------------------------ -------------------
jika (Pesan == SIGNAL_CLOSEBUY ((EachTickMode !TickCheck) || (!EachTickMode (Bar != BarCount)))) {
OrderClose(OrderTicket(), 0.01, Bid, Slippage, MediumSeaGreen);
jika (SignalMail) SendMail([Isyarat Isyarat], [ Simbol() ] DoubleToStr(Bida, Digit) Tutup Beli);
jika (!EachTickMode) BarCount = Bar;
IsTrade = Palsu;
teruskan;
}
//Perhentian mengekori
if(UseTrailingStop TrailingStop gt; 0) {
if(Bid - OrderOpenPrice() gt; Point * TrailingStop) {
if(OrderStopLoss() lt; Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0,
Hijau Laut Sederhana);
jika (!EachTickMode) BarCount = Bar;
teruskan;
}
}
}
} lain {
//Tutup
// ------------------------------------------------ -------------------
//| Isyarat Mula(Keluar Jual) |
// ------------------------------------------------ -------------------
jika (CloseSell1_1 lt;= CloseSell1_2) Pesanan = SIGNAL_CLOSESELL;
// ------------------------------------------------ -------------------
//| Isyarat Tamat(Keluar Jual) |
// ------------------------------------------------ -------------------
jika (Pesan == SIGNAL_CLOSESELL ((EachTickMode !TickCheck) || (!EachTickMode (Bar != BarCount)))) {
OrderClose(OrderTicket(), 0.01, Ask, Slippage, DarkOrange);
jika (SignalMail) SendMail([Isyarat Isyarat], [ Simbol() ] DoubleToStr(Tanya, Digit) Tutup Jual);
jika (!EachTickMode) BarCount = Bar;
IsTrade = Palsu;
teruskan;
}
//Perhentian mengekori
if(UseTrailingStop TrailingStop gt; 0) {
if((OrderOpenPrice() - Ask) gt; (Titik * TrailingStop)) {
if((OrderStopLoss() gt; (Tanya Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask Point * TrailingStop, OrderTakeProfit(), 0,
Jingga Gelap);
jika (!EachTickMode) BarCount = Bar;
teruskan;
}
}
}
}
}
}
// ------------------------------------------------ -------------------
//| Isyarat Mula(Masuk) |
// ------------------------------------------------ -------------------
// ------------------------------------------------ -------------------
//| Isyarat Tamat |
// ------------------------------------------------ -------------------
//Beli
jika (Pesan == SIGNAL_BELI ((EachTickMode !TickCheck) || (!EachTickMode (Bar != BarCount)))) {
if(!IsTrade) {
//Semak margin percuma
if (AccountFreeMargin() lt; (1000 * Banyak)) {
Print(Kami tidak mempunyai wang. Margin Percuma = , AccountFreeMargin());
return(0);
}
jika (UseStopLoss) StopLossLevel = Tanya - StopLoss * Point; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Tanya TakeProfit * Point; lain TakeProfitLevel = 0.0;
Tiket = OrderSend(Simbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy(# MagicNumber ),
MagicNumber, 0, DodgerBlue);
if(Tiket gt; 0) {
jika (OrderSelect(Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(BUY order dibuka : , OrderOpenPrice());
jika (SignalMail) SendMail([Isyarat Isyarat], [ Simbol() ] DoubleToStr(Tanya, Digit) Buka Beli);
} lain {
Print(Ralat membuka pesanan BELI : , GetLastError());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (!EachTickMode) BarCount = Bar;
return(0);
}
}
//Jual
jika (Pesan == SIGNAL_SELL ((EachTickMode !TickCheck) || (!EachTickMode (Bar != BarCount)))) {
if(!IsTrade) {
//Semak margin percuma
if (AccountFreeMargin() lt; (1000 * Banyak)) {
Print(Kami tidak mempunyai wang. Margin Percuma = , AccountFreeMargin());
return(0);
}
jika (UseStopLoss) StopLossLevel = Bida StopLoss * Mata; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Bida - TakeProfit * Mata; lain TakeProfitLevel = 0.0;
Tiket = OrderSend(Simbol(), OP_SELL, Lot, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell(# MagicNumber
), MagicNumber, 0, DeepPink);
if(Tiket gt; 0) {
jika (OrderSelect(Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Print(SELL order dibuka : , OrderOpenPrice());
jika (SignalMail) SendMail([Isyarat Isyarat], [ Simbol() ] DoubleToStr(Bida, Digit) Buka Jual);
} lain {
Cetak(Ralat membuka pesanan JUAL : , GetLastError());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (!EachTickMode) BarCount = Bar;
return(0);
}
}
jika (!EachTickMode) BarCount = Bar;
return(0);
}
// ------------------------------------------------ -------------------