Hỏi về đoạn code dời SL của EA, không biết đặt break ở đâu, để dừng vòng lặp

Hỏi về đoạn code dời SL của EA, không biết đặt break ở đâu, để dừng vòng lặp

Hỏi về đoạn code dời SL của EA, không biết đặt break ở đâu, để dừng vòng lặp

luunguyen502

Member
14
2
upload_2020-6-9_14-58-17.png

Em có một đoạn code dời SL như trên ạ. Anh/chị nào biết để SL ở đâu thì lệnh sẽ dừng ngay khi giá>22pips ạ. Em gặp một số vướng mắc như sau ạ.
1. Khi đặt lệnh "break" ở vị trí thứ nhất, thì SL dời theo liên tục giống trailing stop.
2. Khi đặt lệnh "break" ở vị trí thứ 2, thì SL dời theo liên tục giống trailing stop.

Anh chị cho em hỏi là nên đặt lệnh "break" ở đâu để nó dừng vòng lặp ạ.
Em cảm ơn ạ!
 

Đính kèm

  • upload_2020-6-9_14-47-11.png
    upload_2020-6-9_14-47-11.png
    38.3 KB · Xem: 3
  • upload_2020-6-9_14-48-35.png
    upload_2020-6-9_14-48-35.png
    36.6 KB · Xem: 3

Giới thiệu sách Trading hay
Giao Dịch Theo Xu Hướng Để Kiếm Sống

Sách chia sẻ chiến lược giao dịch, tâm lý, phương pháp quản lý vốn thực chiến của Trader 18 năm kinh nghiệm giao dịch theo xu hướng
1. Nếu bạn muốn đưa giá về BE sau khi giá chạy được X pip
- Buy: (Bid > OrderOpenPrice() + X*Point).
Modify OrderStoploss() bằng OrderOpenPrice()

2. Nếu bạn muốn trailing giá liên tục như MT4:

- Buy: (Bid > OrderStoploss() + X*Point) &&
Modify OrderStoploss() bằng Bid-X*Point

Tương tự với lệnh Sell.
 
Đây, bạn tham khảo dịch về hòa vốn và Trailling stop nhé:
---------------------------------------------------------------------
void MoveToBreakeven() // Ve diem hoa von
{
double PipProfit=0;
for(int b = OrdersTotal()-1; b >=0; b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)== false)continue;
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_BUY)
RefreshRates();
double SL = NormalizeDouble(OrderOpenPrice()+ PipToLockIn* pips, Digits);
PipProfit = NormalizeDouble(Bid - OrderOpenPrice(), Digits);
double MinProfit = WhenToMoveToBe* pips;
if(PipProfit > MinProfit)
if ((SL > NormalizeDouble(OrderStopLoss(), Digits)) || (NormalizeDouble(OrderStopLoss(), Digits) == 0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
for(int s = OrdersTotal()-1; s>=0; s--)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES)==false)continue;
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_SELL)
RefreshRates();
double SL = NormalizeDouble(OrderOpenPrice()- PipToLockIn* pips, Digits);
PipProfit = NormalizeDouble(OrderOpenPrice()- Ask, Digits);
double MinProfit = WhenToMoveToBe* pips;
if(PipProfit > MinProfit)
if ((SL < NormalizeDouble(OrderStopLoss(), Digits)) || (NormalizeDouble(OrderStopLoss(), Digits) == 0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),(OrderOpenPrice()- PipToLockIn* pips),OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}

}
void Adjustrailing()// Trailing Stop
{
//adjust buy

for(int b = OrdersTotal()-1; b>=0; b--)
{
double MaxStopLoss =0 ;
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_BUY)
RefreshRates();
MaxStopLoss = NormalizeDouble(Bid-(AmountTrailing* pips), Digits);
double CurrentStop = NormalizeDouble (OrderStopLoss(),Digits);
if((NormalizeDouble(Bid-OrderOpenPrice(), Digits)> WhenMoveTrailing* pips) && (CurrentStop==0 ||(CurrentStop < MaxStopLoss)))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),MaxStopLoss,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
//adjust sell
for(int s = OrdersTotal()-1; s>=0; s--)
{
double MaxStopLoss = 0;
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_SELL)
RefreshRates();
MaxStopLoss = NormalizeDouble(Ask+(AmountTrailing* pips),Digits);
double CurrentStop = NormalizeDouble (OrderStopLoss(),Digits);
if((NormalizeDouble(OrderOpenPrice()-Ask,Digits) > WhenMoveTrailing* pips) &&(CurrentStop==0 ||(CurrentStop > MaxStopLoss)))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),MaxStopLoss,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
}
//+------------------------------------------------------------------+
 
1. Nếu bạn muốn đưa giá về BE sau khi giá chạy được X pip
- Buy: (Bid > OrderOpenPrice() + X*Point).
Modify OrderStoploss() bằng OrderOpenPrice()

2. Nếu bạn muốn trailing giá liên tục như MT4:

- Buy: (Bid > OrderStoploss() + X*Point) &&
Modify OrderStoploss() bằng Bid-X*Point

Tương tự với lệnh Sell.
Em muốn dời SL thôi a, cái (1) anh viết cũng giống em mà chỉ khác vế thôi. Nhưng mà khổ nổi, viết đơn giản như a thì SL sẽ dời liên tục vì giá thay đổi liên tục.
Viết một cái scripts đơn giản ntn, thì i nó sẽ thông báo là 6, nhưng cũng cách code với vị trí đặt break như thế nhưng trong cái đoạn dời SL ở trên thì nó không ngừng ngay khí giá vượt qua số pips mình đặt ra @@. Không biết sai ở đâu luôn
upload_2020-6-9_15-45-21.png
 
Em muốn dời SL thôi a, cái (1) anh viết cũng giống em mà chỉ khác vế thôi. Nhưng mà khổ nổi, viết đơn giản như a thì SL sẽ dời liên tục vì giá thay đổi liên tục.
Viết một cái scripts đơn giản ntn, thì i nó sẽ thông báo là 6, nhưng cũng cách code với vị trí đặt break như thế nhưng trong cái đoạn dời SL ở trên thì nó không ngừng ngay khí giá vượt qua số pips mình đặt ra @@. Không biết sai ở đâu luôn
View attachment 151819


Giá dời SL liên tục y chang MT4, ko bao giờ dời theo hướng mất thêm tiền thì OK rồi còn gì.

Chưa rõ ý bạn muốn gì nữa?
 
Đây, bạn tham khảo dịch về hòa vốn và Trailling stop nhé:
---------------------------------------------------------------------
void MoveToBreakeven() // Ve diem hoa von
{
double PipProfit=0;
for(int b = OrdersTotal()-1; b >=0; b--)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)== false)continue;
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_BUY)
RefreshRates();
double SL = NormalizeDouble(OrderOpenPrice()+ PipToLockIn*pips, Digits);
PipProfit = NormalizeDouble(Bid - OrderOpenPrice(), Digits);
double MinProfit = WhenToMoveToBe*pips;
if(PipProfit > MinProfit)
if ((SL > NormalizeDouble(OrderStopLoss(), Digits)) || (NormalizeDouble(OrderStopLoss(), Digits) == 0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
for(int s = OrdersTotal()-1; s>=0; s--)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES)==false)continue;
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_SELL)
RefreshRates();
double SL = NormalizeDouble(OrderOpenPrice()- PipToLockIn*pips, Digits);
PipProfit = NormalizeDouble(OrderOpenPrice()- Ask, Digits);
double MinProfit = WhenToMoveToBe*pips;
if(PipProfit > MinProfit)
if ((SL < NormalizeDouble(OrderStopLoss(), Digits)) || (NormalizeDouble(OrderStopLoss(), Digits) == 0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),(OrderOpenPrice()- PipToLockIn*pips),OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}

}
void Adjustrailing()// Trailing Stop
{
//adjust buy

for(int b = OrdersTotal()-1; b>=0; b--)
{
double MaxStopLoss =0 ;
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_BUY)
RefreshRates();
MaxStopLoss = NormalizeDouble(Bid-(AmountTrailing*pips), Digits);
double CurrentStop = NormalizeDouble (OrderStopLoss(),Digits);
if((NormalizeDouble(Bid-OrderOpenPrice(), Digits)> WhenMoveTrailing*pips) && (CurrentStop==0 ||(CurrentStop < MaxStopLoss)))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),MaxStopLoss,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
//adjust sell
for(int s = OrdersTotal()-1; s>=0; s--)
{
double MaxStopLoss = 0;
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if (OrderMagicNumber() != MagicNumber)continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderType()==OP_SELL)
RefreshRates();
MaxStopLoss = NormalizeDouble(Ask+(AmountTrailing*pips),Digits);
double CurrentStop = NormalizeDouble (OrderStopLoss(),Digits);
if((NormalizeDouble(OrderOpenPrice()-Ask,Digits) > WhenMoveTrailing*pips) &&(CurrentStop==0 ||(CurrentStop > MaxStopLoss)))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),MaxStopLoss,OrderTakeProfit(),0,clrNONE))
{
Print("OrderModify error ",GetLastError());
}
//return;
}
}
//+------------------------------------------------------------------+
Giá dời SL liên tục y chang MT4, ko bao giờ dời theo hướng mất thêm tiền thì OK rồi còn gì.

Chưa rõ ý bạn muốn gì nữa?
Em chỉ muốn nó dời 1 lần duy nhất thôi, k muốn nó dời miết như trailing stop. Đoạn code của anh cũng giống em thôi, nếu là scripts, thì nó chỉ chạy 1 lần r ngưng, nên không s. Chứ EA là nó chạy liên tục, lệnh sẽ modify liên tục bên "mode journal", một ngày mà "mode journal" có 2500 message thì tài khoản sẽ bị vô hiệu hóa, vì sever chứa k nổi.
 
1. Nếu bạn muốn đưa giá về BE sau khi giá chạy được X pip
- Buy: (Bid > OrderOpenPrice() + X*Point).
Modify OrderStoploss() bằng OrderOpenPrice()

2. Nếu bạn muốn trailing giá liên tục như MT4:

- Buy: (Bid > OrderStoploss() + X*Point) &&
Modify OrderStoploss() bằng Bid-X*Point

Tương tự với lệnh Sell.
Dạ em biết e sai ở đâu r ạ, tks anh. Lấy SLnew=OrderOpenPrice() là đc, bửa giờ cứ suy nghĩ lấy giá Bid hoặc Ask làm nó chạy liên tục giống trailing stop.
 
1. Nếu bạn muốn đưa giá về BE sau khi giá chạy được X pip
- Buy: (Bid > OrderOpenPrice() + X*Point).
Modify OrderStoploss() bằng OrderOpenPrice()

2. Nếu bạn muốn trailing giá liên tục như MT4:

- Buy: (Bid > OrderStoploss() + X*Point) &&
Modify OrderStoploss() bằng Bid-X*Point

Tương tự với lệnh Sell.
Anh ơi, sẵn cho em hỏi luôn là hiện tại em đã dời SL đc 1 lần r. Anh có ý tưởng nào để mình dời nhiều lần k anh.
ví dụ:
Lần 1 giá chạy đc 40 pips, mình dời SL về dương 10 pips.
Lần 2 giá tiếp tục chạy đc 70 pips, mình dời SL về dường 30pips.
Lần 3...
Lần 4...
Anh đã từng làm con EA nào như v chưa ạ, cho em xin ít ý tưởng với ạ. Em cảm ơn anh.
 
Bạn có thể dời nhảy SL theo bội số của X là số pip định sẵn.

Ví dụ giá chạy được Y pips và Y >= X
n= Y/X dùng MathFloor để làm tròn xuống giá trị của n
modify SL nhảy lên mức OrderOpenPrice() +/- (n-1)*X*Point.

Ý tưởng là như vậy.
 
Em muốn dời SL thôi a, cái (1) anh viết cũng giống em mà chỉ khác vế thôi. Nhưng mà khổ nổi, viết đơn giản như a thì SL sẽ dời liên tục vì giá thay đổi liên tục.
Viết một cái scripts đơn giản ntn, thì i nó sẽ thông báo là 6, nhưng cũng cách code với vị trí đặt break như thế nhưng trong cái đoạn dời SL ở trên thì nó không ngừng ngay khí giá vượt qua số pips mình đặt ra @@. Không biết sai ở đâu luôn
View attachment 151819
bạn ơi mình cũng đang muốn hỏi code về dịch SL bạn pm giúp mình với được không zalo mình 0347687195
 

BÌNH LUẬN MỚI NHẤT

  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 238 Xem / 18 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 933 Xem / 62 Trả lời
  • Quíc Óp trong Phân tích Forex - Vàng - Hàng hóa 137 Xem / 3 Trả lời
  • Berkeley trong Phân tích Forex - Vàng - Hàng hóa 92 Xem / 2 Trả lời
  • LuTienSinh trong Phân tích Forex - Vàng - Hàng hóa 107 Xem / 3 Trả lời
  • ngoi_sao_co_doc trong Phân tích Forex - Vàng - Hàng hóa 23,967 Xem / 81 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 230 Xem / 9 Trả lời
  • AdBlock Detected

    We get it, advertisements are annoying!

    Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

    Back
    Bên trên