Backtest đa khung thời gian bị lỗi

wall84

New Member
Gởi các chuyên gia.
Em code có đoạn như sau:

int ticket=OrderSend(Symbol(),OP_BUYLIMIT,lot,Low[iLowest(NULL,PERIOD_M15,MODE_LOW,3,1)],7,Ask-SL*pip,Bid+TP*pip," LENH BUY ",MagicNumber,0,clrGreen);

Kết quả khi test tren khung Day nó ko chịu vào lệnh tại điểm thấp của 15p mà nó vào điểm thấp của ngày, còn test khung 15 phút thì nó vào đúng điểm.

Vậy các chuyên gia cho em hỏi làm cách nào để em test khung Day nó vẫn vào đúng điểm trên khung 15p vậy.

Em cám ơn trước :)
 

LangTu

<br><font color=blue><b>"Thiên Ngoại Hữu Thiên"</f
backtest và chạy realtime (realtime là ko nhất thiết phải tk real, mà tk demo cũng là chạy realtime) là 2 khái niệm khác nhau rất nhiều, nên thường xẩy ra sai số là chuyện bình thường.
mặt khác, nếu đã cố tính code cho vào lệnh trên nến M15 thì sao ko áp dụng trên M15 luôn mà lại đi chạy trên D1 cho lằng nhằng?
vấn đề này, thử gán 1 biến có giá trị bằng cây nến thấp của M15 đi, rồi goi nó trong phần vào lệnh. bởi nếu không, nó sẽ bị lẫn lộn trong phần nhận diện giá trị vào lênh, nhất là lại chạy trong môi trường backtest
 

wall84

New Member
Em chưa hiểu ý anh Lãng lắm.
EM bị như sau:
Nếu nến ngày vượt MA5 thì buylimit tại đáy nến 15 trước đó
Nếu em chạy trên M15 thì nó buy tai nến M15 vượt MA5, còn nếu em chạy trên Dayli thì nó buy tai đáy nến Dayli trước.
Có giải pháp nào ko anh?
 

LangTu

<br><font color=blue><b>"Thiên Ngoại Hữu Thiên"</f
xem lại đi, code 1 đằng, nói một nẻo.

LAng đã phân tích cho rồi, đọc ko kỹ.

chú ghi thế này :
Nếu em chạy trên M15 thì nó buy tai nến M15 vượt MA5, còn nếu em chạy trên Dayli thì nó buy tai đáy nến Dayli trước.
nếu muốn vào lệnh trên nến D1, sao lại lồng điều kiện của M15 vào làm gì?

mà nếu đã muốn cho hoạt động trên D1 và lại muốn lấy điều kiện vào lệnh theo M!5 thì LÃng đã nói ở phía trên rồi.

nói chung, ghi còn ko rõ ràng, muốn làm cái gì, thì có ai giúp đc, muốn làm gì thì phải nói rõ ràng, ghi ra chi tiết, chứ cứ đưa thông tin mình code sai lên, thì ai giúp đc gì đâu!
 

wall84

New Member
if(OrdersTong()==0 &&
iClose(NULL,PERIOD_D1,2)>iOpen(NULL,PERIOD_D1,2) &&
iClose(NULL,PERIOD_D1,1)<iClose(NULL,PERIOD_D1,2) &&
iClose(NULL,PERIOD_D1,0)<iClose(NULL,PERIOD_D1,1) &&
iClose(NULL,PERIOD_D1,0)<iLowest(NULL,0,MODE_HIGH,2,1) &&
iClose(NULL,PERIOD_D1,0)==iLow(NULL,PERIOD_D1,0) &&
iMA(NULL,PERIOD_D1,5,0,MODE_SMMA,PRICE_MEDIAN,0)<iMA(NULL,PERIOD_D1,12,0,MODE_SMMA,PRICE_MEDIAN,0) &&
iHigh(NULL,PERIOD_D1,1)>=iMA(NULL,PERIOD_D1,5,0,MODE_SMMA,PRICE_MEDIAN,1) &&
iLow(NULL,PERIOD_D1,1)<=iMA(NULL,PERIOD_D1,5,0,MODE_SMMA,PRICE_MEDIAN,1) &&
iClose(NULL,PERIOD_D1,1)>iBands(NULL,PERIOD_D1,20,2,0,PRICE_CLOSE,MODE_LOWER,1) &&
iClose(NULL,PERIOD_D1,0)>iBands(NULL,PERIOD_D1,20,2,0,PRICE_CLOSE,MODE_LOWER,0) &&
iClose(NULL,PERIOD_D1,1)<iMA(NULL,PERIOD_D1,9,0,MODE_SMMA,PRICE_LOW,1))
//iADX(NULL,0,14,PRICE_HIGH,MODE_MAIN,0)>25) // LENH SELL
{
int ticket=OrderSend(Symbol(),OP_SELLLIMIT,lot,High[iHighest(NULL,PERIOD_M15,MODE_HIGH,2,0)],7,Ask+SL*pip,Ask-TP*pip," LENH SELL ",MagicNumber,0,clrRed);
}

Em code thế này, đã chỉnh cho nó theo đúng khung thời gian, mà nó ko hiểu ý em
Lệnh buylimit sinh ra trên khung Daily, giá của lệnh trên khung 15p, mà nó ko hiểu.
Đang test khung nào thì nó ép về khung đó hết
Test khung 15p thì nó sinh ra lệnh trên khung 15p, giá theo nến khung 15p
Test khung Daily thì sinh ra lệnh khung Daily, giá theo nến khung Daily luôn
Có anh chị nào giúp em với
 

LangTu

<br><font color=blue><b>"Thiên Ngoại Hữu Thiên"</f
lấy cái điểm muốn vào lệnh (theo M15 ấy) gán cho 1 giá trị , sau đó, phần vào lệnh phía trên (đang mún chạy D1 đúng ko) thì mục vào lệnh sẽ gọi phần biến đó là đc. chứ ko dùng điểm vào lệnh trực tiếp như thế.
 

LangTu

<br><font color=blue><b>"Thiên Ngoại Hữu Thiên"</f
cái này dễ thôi mà, có khó gì đâu.
do e ko suy nghĩ các thành phần trong mục vào lệnh là những gì, và lấy biến của các mục đó là cố định hay có thể thay đôi được hay không, nên e mới không làm nhanh.

ví dụ, phần vào lệnh, thì các giá trị như số lot, điểm vào lệnh, điểm TP, SL, magicnumber là có thể thay đổi, nên biến không cố định.
còn phần lệnh sẽ vào (buy , sell, pending) thì nó là bán tự động, tức là có thể thay đổi, nhưng chỉ có trong mấy mục đó thôi. không thể thay đổi dc nó. nó giống như màu sắc của lệnh (buy / sell) thì cũng là bán tự động, vì nếu sét biến cho nó, thì nó cũng chỉ nằm trong danh mục màu sắc có sẵn.

tuy nhiên, nếu lệnh vào là trực tiếp, không phải lệnh chờ, thì chỉ có thể là OP_BUY hoặc OP_SELL, nghĩa là không đổi dc, và nó là cố định. không gán biến vào đc, vì có gán, cũng chỉ là trạng thái buy hoặc sell, nên sẽ ít ai đi gán.

từ đó, sẽ có thể biết cái nào có thể thay đổi, cái nào không, và gán giá trị biến cho phù hợp.

từ chỗ gán biến, sẽ biết cách viết cái e cần rất nhanh. đơn giản thế đó.
 
Top