Tôi đang cố gắng tìm hiểu cách viết mã những chuyên gia tư vấn chuyên môn để tôi có một thứ đơn giản để bắt đầu.
Ý tưởng là để EA mở một vị thế dài khi giá vượt qua MA từ bên dưới.
Hơn nữa, khi giá quay trở lại và vượt qua MA từ trên vị trí dài sẽ được đóng lại và một đoạn ngắn sẽ được mở ra.
Ý tưởng này có vẻ đơn giản và mã bên dưới dường như đúng nhưng không có gì xảy ra.
Ai đó có thể chỉ cho tôi biết sai lầm của tôi ở đâu không?
extern double Lots = 0,01;
extern int Slippage = 7;
extern string comment = MA_Template;
extern int MagicNumber = 0;
/////////////////////////////////////
int ThisBarTrade = 0;
int Position = 0;
int init () {
CalcPosition ();
}
int start () {
đôi MA;
bool closed = false;
if (ThisBarTrade! = Bars) {
MA = iMA (NULL, 0,5,0,0,0,0);
//Mua điều kiện
nếu (MA gt; = Vị trí Giá thầu lt; = 0) {
CalcPosition ();
if (Vị trí lt; 0) {
if (CloseSingleSell () == false) trả về (0);/thất bại nhưng nó có thể thử lại
}
nếu (OpenSingleBuy () == false) trả về (0);/không mua được nhưng có thể thử lại
ThisBarTrade = Thanh;
}
//Bán điều kiện
if (MA lt; = Hỏi Vị trí gt; = 0) {
CalcPosition ();
if (Vị trí gt; 0) {
if (CloseSingleBuy () == false) trả về (0);/thất bại nhưng nó có thể thử lại
}
nếu (OpenSingleSell () == false) trả lại (0);/không bán được nhưng có thể thử lại
ThisBarTrade = Thanh;
}
}
}
// ----------------------------------------------- -------------------
void CalcPosition () {
Vị trí = 0;
cho (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol () == Biểu tượng ()) {
if (OrderType () == OP_BUY) Vị trí = 1;
if (OrderType () == OP_SELL) Vị trí - = 1;
}
}
}
bool CloseSingleBuy () {
bool đóng;
cho (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
if (OrderType () == OP_BUY) {
while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
RefreshRates ();
closed = OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, White);
In (Cố gắng CloseSingleMua đơn hàng # i Giá thầu);
if (closed == -1) {
return (false);
} else {
return (true);
}
}
}
}
return (false);
}
bool CloseSingleSell () {
bool đóng;
cho (int i = 0; i lt; OrdersTotal (); i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
if (OrderType () == OP_SELL) {
while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
RefreshRates ();
closed = OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, White);
In (Cố gắng CloseSingleĐặt hàng # i Hỏi);
if (closed == -1) {
return (false);
} else {
return (true);
}
}
}
}
return (false);
}
bool OpenSingleBuy () {
if (Position! = 0) return (false);
int ticket = -1;
while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
RefreshRates ();
ticket = OrderSend (Ký hiệu (), OP_BUY, Rất nhiều, Hỏi, Trượt, 0.0, 0.0, bình luận mua, MagicNumber, 0, Lime);
if (ticket lt; 0) {
In (Thất bại trong OpenSingleMua, lỗi #, GetLastError ());
return (false);
} else {
In (Đặt hàng thành công với OpenSingleBuy);
return (true);
}
return (false);
}
bool OpenSingleSell () {
if (Position! = 0) return (false);
int ticket = -1;
while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
RefreshRates ();
ticket = OrderSend (Biểu tượng (), OP_SELL, Rất nhiều, Giá thầu, Trượt, 0.0, 0.0, bình luận bán, MagicNumber, 0, Lime);
if (ticket lt; 0) {
In (Không thể OpenSingleSell, lỗi #, GetLastError ());
return (false);
} else {
In (Đặt hàng thành công với OpenSingleSell);
return (true);
}
return (false);
}