Saya cuba belajar bagaimana untuk menodai penasihat pakar supaya saya mendapat sesuatu yang mudah untuk dimulakan.
Idea ini adalah untuk EA untuk membuka kedudukan yang panjang apabila harga melintasi MA dari bawah.
Daripada, apabila harga turun dan melintasi MA dari atas kedudukan lama akan ditutup dan pendek akan dibuka.
Idea ini nampak mudah dan kod di bawah kelihatan betul tetapi tiada apa yang berlaku.
Bolehkah seseorang menunjuk saya di mana kesilapan saya?
extern double Lots = 0.01;
extern int Slippage = 7;
extern string comment = MA_Template;
extern int MagicNumber = 0;
/////////////////////////////////////
int thisBarTrade = 0;
int Kedudukan = 0;
int init () {
CalcPosition ();
}
int start () {
double MA;
bool ditutup = false;
jika (ThisBarTrade! = Bar) {
MA = iMA (NULL, 0,5,0,0,0,0);
//Beli Keadaan
jika (MA gt; = Kedudukan Tawaran lt; = 0) {
CalcPosition ();
jika (Kedudukan lt; 0) {
jika (CloseSingleSell () == false) kembali (0);kegagalan tetapi boleh cuba lagi
}
jika (OpenSingleBuy () == false) kembali (0);/kegagalan untuk membeli tetapi boleh cuba lagi
ThisBarTrade = Bar;
}
//Jual Keadaan
jika (MA lt; = Ask Position gt; = 0) {
CalcPosition ();
jika (Kedudukan gt; 0) {
jika (CloseSingleBuy () == false) return (0);kegagalan tetapi boleh cuba lagi
}
jika (OpenSingleSell () == false) kembali (0);kegagalan untuk menjual tapi mungkin cuba lagi
ThisBarTrade = Bar;
}
}
}
// ----------------------------------------------- -------------------
tidak sah CalcPosition () {
Kedudukan = 0;
untuk (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
jika (OrderSymbol () == Simbol ()) {
jika (OrderType () == OP_BUY) Kedudukan = 1;
jika (OrderType () == OP_SELL) Kedudukan - = 1;
}
}
}
bounce CloseSingleBuy () {
bool ditutup;
untuk (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
jika (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
jika (OrderType () == OP_BUY) {
manakala (! IsTradeAllowed ()) Tidur (MathRand ()10);
RefreshRates ();
ditutup = OrderClose (OrderTicket (), OrderLots (), Tawaran, Slippage, Putih);
Cetakan (Mencuba untuk menutupSendahan pesanan # i Tawaran);
jika (ditutup == -1) {
kembali (palsu);
} else {
kembali (benar);
}
}
}
}
kembali (palsu);
}
bounce CloseSingleSell () {
bool ditutup;
untuk (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
jika (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
jika (OrderType () == OP_SELL) {
manakala (! IsTradeAllowed ()) Tidur (MathRand ()10);
RefreshRates ();
ditutup = OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, White);
Cetak (Mencuba untuk menutup pesananSingleSell # i Ask);
jika (ditutup == -1) {
kembali (palsu);
} else {
kembali (benar);
}
}
}
}
kembali (palsu);
}
bool OpenSingleBuy () {
jika (Kedudukan! = 0) pulangan (palsu);
tiket int = -1;
manakala (! IsTradeAllowed ()) Tidur (MathRand ()10);
RefreshRates ();
tiket = OrderSend (Symbol (), OP_BUY, Banyak, Ask, Slippage, 0.0, 0.0, komen beli, MagicNumber, 0, Lime);
jika (tiket lt; 0) {
Cetak (Gagal BukaSingleBuy, ralat #, GetLastError ());
kembali (palsu);
} else {
Cetak (Berjaya ditempatkan pesanan dengan OpenSingleBuy);
kembali (benar);
}
kembali (palsu);
}
boolean OpenSingleSell () {
jika (Kedudukan! = 0) pulangan (palsu);
tiket int = -1;
manakala (! IsTradeAllowed ()) Tidur (MathRand ()10);
RefreshRates ();
tiket = OrderSend (Symbol (), OP_SELL, Banyak, Tawaran, Slippage, 0.0, 0.0, komen menjual, MagicNumber, 0, Lime);
jika (tiket lt; 0) {
Cetak (Gagal BukaSingleSell, ralat #, GetLastError ());
kembali (palsu);
} else {
Cetak (Berjaya ditempatkan pesanan dengan OpenSingleSell);
kembali (benar);
}
kembali (palsu);
}