Di bawah adalah EA yang saya gunakan sebagai templat untuk membina EA untuk sistem yang saya gunakan. Saya bukan seorang programmer yang berpengalaman dan saya berharap projek ini akan membolehkan saya membina pengetahuan saya tentang mql4. Kod di bawah berfungsi dengan baik namun saya terjebak pada satu bahagian kecil. EA ini pada masa ini hanya mempunyai satu perdagangan terbuka pada satu masa. Saya ingin perdagangan serentak mungkin. Bolehkah seseorang sila melihat kod ke bawah dan beritahu saya bahagian mana yang mengehadkan ini. Saya percaya bahawa ia boleh menjadi bahagian kedudukan cek. Banyak terima kasih.
Originally Posted by ;#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = Palsu;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int semasa;
bool TickCheck = False;
// ----------------------------------------------- -------------------
//| fungsi permulaan pakar |
// ----------------------------------------------- -------------------
int init () {
BarCount = Bar;
jika (SetiapTickMode) Semasa = 0; lain semasa = 1;
pulangan (0);
}
// ----------------------------------------------- -------------------
//| fungsi deinitialization pakar |
// ----------------------------------------------- -------------------
int deinit () {
pulangan (0);
}
// ----------------------------------------------- -------------------
//| fungsi permulaan pakar |
// ----------------------------------------------- -------------------
int start () {
int Order = SIGNAL_NONE;
int Jumlah, Tiket;
double StopLossLevel, TakeProfitLevel;
jika (EachTickMode Bar! = BarCount) TickCheck = False;
Jumlah = OrdersTotal ();
Order = SIGNAL_NONE;
// ----------------------------------------------- -------------------
//| Pembolehubah Variable |
// ----------------------------------------------- -------------------
double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
// ----------------------------------------------- -------------------
//| Akhir Pembolehubah |
// ----------------------------------------------- -------------------
//Periksa kedudukan
bool IsTrade = Palsu;
untuk (int i = 0; i lt; Total; i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
jika (OrderType () lt; = OP_SELL OrderSymbol () == Simbol ()) {
IsTrade = Benar;
jika (OrderType () == OP_BUY) {
/Tutup
// ----------------------------------------------- -------------------
//| Begin Begin (Beli Keluar) |
// ----------------------------------------------- -------------------
jika (CloseBuy1_1 lt; CloseBuy1_2) Pesanan = SIGNAL_CLOSEBUY;
// ----------------------------------------------- -------------------
//| Akhir Isyarat (Keluar Keluar) |
// ----------------------------------------------- -------------------
jika (Pesanan == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Tawaran, Slippage, MediumSeaGreen);
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Beli Tutup);
jika (! EachTickMode) BarCount = Bar;
IsTrade = False;
terus;
}
/Stop trailing
jika (UseTrailingStop TrailingStop gt; 0) {
jika (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
jika (OrderStopLoss () lt; Tawaran - Titik * TrailingStop) {
OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
jika (! EachTickMode) BarCount = Bar;
terus;
}
}
}
} else {
/Tutup
// ----------------------------------------------- -------------------
//| Begin Signal (Keluar Jual) |
// ----------------------------------------------- -------------------
jika (CloseSell1_1 gt; CloseSell1_2) Pesanan = SIGNAL_CLOSESELL;
// ----------------------------------------------- -------------------
//| Akhir Isyarat (Keluar Jual) |
// ----------------------------------------------- -------------------
jika (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Close Sell);
jika (! EachTickMode) BarCount = Bar;
IsTrade = False;
terus;
}
/Stop trailing
jika (UseTrailingStop TrailingStop gt; 0) {
jika ((OrderOpenPrice () - Tanya) gt; (Point * TrailingStop)) {
jika ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
jika (! EachTickMode) BarCount = Bar;
terus;
}
}
}
}
}
}
// ----------------------------------------------- -------------------
//| Begin Signal (Entry) |
// ----------------------------------------------- -------------------
jika (Buy1_1 gt; Buy1_2) Pesanan = SIGNAL_BUY;
jika (Sell1_1 lt; Sell1_2) Pesanan = SIGNAL_SELL;
// ----------------------------------------------- -------------------
//| Akhir Isyarat |
// ----------------------------------------------- -------------------
//Beli
jika (Perintah == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount))) {{
jika (! IsTrade) {
//Periksa margin percuma
jika (AccountFreeMargin () lt; (1000 * Banyak)) {
Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
pulangan (0);
}
jika (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Tanya TakeProfit * Point; lain TakeProfitLevel = 0.0;
Tiket = OrderSend (Simbol (), OP_BUY, Banyak, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
jika (Tiket gt; 0) {
jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Cetak (pesanan BUY dibuka:, OrderOpenPrice ());
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Beli Terbuka);
} else {
Cetak (Ralat membuka pesanan BUY:, GetLastError ());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
}
//Jual
jika (Perintah == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
jika (! IsTrade) {
//Periksa margin percuma
jika (AccountFreeMargin () lt; (1000 * Banyak)) {
Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
pulangan (0);
}
jika (UseStopLoss) StopLossLevel = Tawaran StopLoss * Point; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Bid ??????- TakeProfit * Point; lain TakeProfitLevel = 0.0;
Tiket = OrderSend (Symbol (), OP_SELL, Banyak, Tawaran, Slippage, StopLossLevel, TakeProfitLevel, Menjual (# MagicNumber ), MagicNumber, 0, DeepPink);
jika (Tiket gt; 0) {
jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Cetak (pesanan JUAL dibuka:, OrderOpenPrice ());
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Open Sell);
} else {
Cetak (Ralat membuka pesanan JUAL:, GetLastError ());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
}
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
// ----------------------------------------------- -------------------Originally Posted by ;#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = False;
extern int StopLoss = 30;
extern bool UseTakeProfit = Palsu;
extern int TakeProfit = 60;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
int BarCount;
int semasa;
bool TickCheck = False;
// ----------------------------------------------- -------------------
//| fungsi permulaan pakar |
// ----------------------------------------------- -------------------
int init () {
BarCount = Bar;
jika (SetiapTickMode) Semasa = 0; lain semasa = 1;
pulangan (0);
}
// ----------------------------------------------- -------------------
//| fungsi deinitialization pakar |
// ----------------------------------------------- -------------------
int deinit () {
pulangan (0);
}
// ----------------------------------------------- -------------------
//| fungsi permulaan pakar |
// ----------------------------------------------- -------------------
int start () {
int Order = SIGNAL_NONE;
int Jumlah, Tiket;
double StopLossLevel, TakeProfitLevel;
jika (EachTickMode Bar! = BarCount) TickCheck = False;
Jumlah = OrdersTotal ();
Order = SIGNAL_NONE;
// ----------------------------------------------- -------------------
//| Pembolehubah Variable |
// ----------------------------------------------- -------------------
double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
// ----------------------------------------------- -------------------
//| Akhir Pembolehubah |
// ----------------------------------------------- -------------------
//Periksa kedudukan
bool IsTrade = Palsu;
untuk (int i = 0; i lt; Total; i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
jika (OrderType () lt; = OP_SELL OrderSymbol () == Simbol ()) {
IsTrade = Benar;
jika (OrderType () == OP_BUY) {
/Tutup
// ----------------------------------------------- -------------------
//| Begin Begin (Beli Keluar) |
// ----------------------------------------------- -------------------
jika (CloseBuy1_1 lt; CloseBuy1_2) Pesanan = SIGNAL_CLOSEBUY;
// ----------------------------------------------- -------------------
//| Akhir Isyarat (Keluar Keluar) |
// ----------------------------------------------- -------------------
jika (Pesanan == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Tawaran, Slippage, MediumSeaGreen);
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Beli Tutup);
jika (! EachTickMode) BarCount = Bar;
IsTrade = False;
terus;
}
/Stop trailing
jika (UseTrailingStop TrailingStop gt; 0) {
jika (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
jika (OrderStopLoss () lt; Tawaran - Titik * TrailingStop) {
OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
jika (! EachTickMode) BarCount = Bar;
terus;
}
}
}
} else {
/Tutup
// ----------------------------------------------- -------------------
//| Begin Signal (Keluar Jual) |
// ----------------------------------------------- -------------------
jika (CloseSell1_1 gt; CloseSell1_2) Pesanan = SIGNAL_CLOSESELL;
// ----------------------------------------------- -------------------
//| Akhir Isyarat (Keluar Jual) |
// ----------------------------------------------- -------------------
jika (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Close Sell);
jika (! EachTickMode) BarCount = Bar;
IsTrade = False;
terus;
}
/Stop trailing
jika (UseTrailingStop TrailingStop gt; 0) {
jika ((OrderOpenPrice () - Tanya) gt; (Point * TrailingStop)) {
jika ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
jika (! EachTickMode) BarCount = Bar;
terus;
}
}
}
}
}
}
// ----------------------------------------------- -------------------
//| Begin Signal (Entry) |
// ----------------------------------------------- -------------------
jika (Buy1_1 gt; Buy1_2) Pesanan = SIGNAL_BUY;
jika (Sell1_1 lt; Sell1_2) Pesanan = SIGNAL_SELL;
// ----------------------------------------------- -------------------
//| Akhir Isyarat |
// ----------------------------------------------- -------------------
//Beli
jika (Perintah == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount))) {{
jika (! IsTrade) {
//Periksa margin percuma
jika (AccountFreeMargin () lt; (1000 * Banyak)) {
Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
pulangan (0);
}
jika (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Tanya TakeProfit * Point; lain TakeProfitLevel = 0.0;
Tiket = OrderSend (Simbol (), OP_BUY, Banyak, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
jika (Tiket gt; 0) {
jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Cetak (pesanan BUY dibuka:, OrderOpenPrice ());
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Beli Terbuka);
} else {
Cetak (Ralat membuka pesanan BUY:, GetLastError ());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
}
//Jual
jika (Perintah == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
jika (! IsTrade) {
//Periksa margin percuma
jika (AccountFreeMargin () lt; (1000 * Banyak)) {
Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
pulangan (0);
}
jika (UseStopLoss) StopLossLevel = Tawaran StopLoss * Point; lain StopLossLevel = 0.0;
jika (UseTakeProfit) TakeProfitLevel = Bid ??????- TakeProfit * Point; lain TakeProfitLevel = 0.0;
Tiket = OrderSend (Symbol (), OP_SELL, Banyak, Tawaran, Slippage, StopLossLevel, TakeProfitLevel, Menjual (# MagicNumber ), MagicNumber, 0, DeepPink);
jika (Tiket gt; 0) {
jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
Cetak (pesanan JUAL dibuka:, OrderOpenPrice ());
jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Open Sell);
} else {
Cetak (Ralat membuka pesanan JUAL:, GetLastError ());
}
}
jika (EachTickMode) TickCheck = Benar;
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
}
jika (! EachTickMode) BarCount = Bar;
pulangan (0);
}
// ----------------------------------------------- -------------------