You are on page 1of 6

Bài 1: Đại cương MQL4

I. Một số khái niệm cơ bản


1. Tick
Là sự kiện khi giá có sự thay đổi
Tick được gửi đến client terminal từ server được cài đặt tại trung tâm giao dịch

II. Hằng và Biến


1. Hằng
2. Biến
III. Kiểu dữ liệu
Int

Double

Bool

String

Color:
RGB: C’128, 128,128’
Số nguyên: 0xRRGGBB
Hoặc dùng tên màu: Red, White…

Datetime
D’yyyy.mm.dd hh.mm.ss’
D’dd.mm.yyyy’
D’yyyy.mm.dd ‘
D’’

Bài 2: Biến
I. Biến được định nghĩa trước và hàm RefreshRate().
Là các biến được định nghĩa bởi MQL4
Không thể thay đổi bởi người lập trình.
Giá trin của biến phản ánh trạng thái của biểu đồ hiện tại
1. Các biến được định nghĩa trước có tên đơn giản
Ask
Bid
Bars: Số lượng nến có trong chart hiện tại
Point: Thay đổi nhỏ nhất của tỷ giá cặp tiền hiện tại
Digits: Số chữ số sau đấu thập phân
2. Danh sách tên biến mảng được định nghĩa trước
Time: thời gian mở của mỗi nến
Open: Giá mở của của mỗi nến
Close: Giá đóng cửa của mỗi nến
High: Giá cao nhất của mỗi nến
Low: Giá thấp nhất của mỗi nến
Volume: Khối lương Tick của mỗi nến
3. Thuộc tính của biến định nghĩa trước
KHông sử dụng tên biến được định nghĩa trước cho biến được định nghĩa bởi lập trình viên.
Giá trị của các biến định nghĩa trước được cập nhật tự động bởi client terminal ngay khi các
hàm đặc biệt chạy.
Sử dụng các biến định nghĩa trước hoàn toàn giống như các biến khác, chỉ khác là không thể
thay đổi tùy tiện.
Các client terminal tạo một tập hợp các bản sao cục bộ của các biến định nghĩa trước cho
tungd chương trình được bắt đầu . Mỗi chương trình hoạt động với một bản sao. Các bản sao
có thể được tạo ra cùng lúc riêng biệt.

4. Hàm bool RefreshRate()


Cập nhật dữ liệu chủ động trong trường hợp chương trình thực hiện mất thời gian lớn yêu
cầu phải cập nhật dữ liệu cho bản sao.
Hàm RefreshRate chỉ ảnh hưởng đến chương trình mà chứa nó. Không ảnh hưởng đến tất cả
các chương trình khác đang chạy trên terminal.

II. Các loại biến


Variable scope là khu vực mà giá trị của biến có thể được truy cập và sử dụng
Tùy theo Scope thì có 2 loại biến
- Biến Cục bộ
Là biến được khai báo trong một hàm. Nó chỉ có thể được sử dụng trong ham đó.
- Biến toàn cục
Là biến được khai báo ở ngoài tất cả các hàm
Có phạm vi sử dụng ở tất cả các hàm trong chương trình.
Biến toàn cục chỉ có thể được khởi tạo bằng 1 hằng số tương ứng với kiểu dữ liệu của
nó chứ không phải biểu thức
Biến toàn cục phải được khai báo trước khi các hàm được thực hiện
- Biến tĩnh
Giống biến cục bộ nhưng khác ở chỗ là giá trị của nó được lưu giữ để sử dụng cho lần
gọi tiếp theo đến hàm chứa nó .
Và chỉ được khởi tạo bởi 1 hằng số tương ứng. nếu không được khởi tạo tường minh thì
nó sẽ mặc định là 0.
Được chứa trong bộ nhớ dài hạn.
Mảng thuộc loại biến tĩnh dù nó không được khai báo rõ ràng.
static int Number =2;
- Biến ngoài
Biến lấy giá trị nhập vào khi chạy chương trình.
Là một biến toàn cục.
extern int Count;
III. Biến GlobalVariables của Terminal
Khi cần trao đổi các giá trị giữa các program chúng ta sử dụng GV.
1. Đặc điểm của GV.
Cùng tên gọi nhưng khác với global variable của chương trình.
GV có phạm vi trên tất cả các chương trình đang chạy trên Terminal.
GV có thể được khai báo trong bất cứ chương trình nào, và còn có thể bị xóa.
Giá trị của GV được lưu trữ trong ổ cứng và được lưu lại khi đóng terminal
Giá trị của nó được xóa trong 4 tuần kể từ lần gọi cuối, sau thời gian này nó sẽ bị xóa bởi
terminal
Kiểu của GV chỉ có thẻ là double.
2. Các hàm làm việc với GV.
- Hàm khai báo và khởi tạo GV.
datetime GlobalVariableSet( string name, double value);
Nếu biến chưa tồn tại thì hàm sẽ tạo ra biến mới.
Nếu hàm thực hiện thành công sẽ trả về thời gian truy cập biến cuối cùng. Nếu k hông
thành công sẽ trả về 0.
- Ham lấy giá trị của một biến GV.
double GlobalVariabalGet( string name);
Hàm này trả về giá trị của một biến GV, nếu lỗi trả về 0. Để lấy thông tin lỗi sử dụng
hàm GetLastError().
- Hàm xóa biến GV.
bool GlobalVariableDel( string name);
Thành công trả về true.

Bài 3: Mảng

I. Khái niệm.
Mảng là tập hợp các giá trị cùng kiểu dữ liệu có một tên chung.
Có mảng một chiều và nhiều chiều.
Kiểu dữ liệu có thể là bất kỳ kiểu dữ liệu nào được cho phép.
Xác định phần tử mảng bằng chỉ số.
II. Chỉ số.
III. Khai báo mảng và truy cập giá trị phần tử mảng.
Typedata Name[10][10];
Tất cả phải đều được khai báo tường minh.
IV. Khởi tạo mảng.
Trong chuỗi giá trị khởi tạo một hoặc vài hằng số có thể bị bỏ qua. Nếu là số sẽ được gán là
0, nếu là string thì được gán là “”.
Nếu khởi tạo mảng luôn khi khai báo mà không chỉ rõ số chiều của mảng thì số chiều của
mảng được terminal tự đông xác định dựa vào trình tự giá trị khởi tạo cho mảng.
Một mảng cũng có thể được khởi tạo bởi hàm chuẩn ArrayInitialize(). Tất cả các mảng là
static type mặc dù nó không được chỉ rõ ràng. Có nghĩa là tất cả mảng bảo tồn giá tri của nó
giữa các lần gọi hàm.
V. Các loại mảng.
1. Mảng do người dung định nghĩa.
Có thể làm việc như một biến đối với mỗi phần tử mảng.
2. Mảng Array_timeseries
Open, Close, High, Low, Volume, Time
Không được thay đổi giá trị tùy ý.

Bài 4: Lập trình Hoạt động giao dịch.

I. Các cách tạo giao dịch.


Cso 2 loại lệnh giao dịch: đó là lệnh thị trường và lệnh chờ.
Lệnh thị trường: Sell, Buy
Lệnh chờ: Sell limit, buy limit, sell stop, buy stop.
Có thể mở, đóng hoặc thay đổi lệnh.
1. Các hàm
OrderSelect()
OrderSend()
OrderClose()
OrderDelete()
OrderModify()
Các hàm trên chỉ sử dụng trong EA, script còn trong Indicators bị cấm.
2. Đặc điểm của Terminal
Terminal làm 2 hành động. Gửi yêu cầu của lệnh đúng tới server hoặc từ chối yêu cầu
của lệnh sai.
Trong một thời gian chỉ có một luồng thực thi, tức là chỉ có một yêu cầu được thực hiện,
sau đó mới tới yêu cầu khác.
3. Đặc điểm của server
Thông tin về lịch sử giao dịch của mỗi tài khoản được bảo mật cao và được ưu tiên cao
hơn so với lịch sử đưuọc lưu trữ ở Terminal.
Server gửi phản hồi khi một yêu cầu được thực hiện. Nhưng không gửi bất kỳ phản hồi
nào khi một yêu cầu bị từ chối.
II. Đặc điểm và quy tắc đặt lệnh
1. Đặc điểm của symbol
Nguyên tắc khớp giá.
Nguyên tắc: broker cung cấp cho nhà giao dịch một báo giá hai chiều.
Báo giá hai chiều là một cập giá được cung cấp bởi broker để mua và bán một công cụ
tài chính tại một thời điểm
Bid: Là gía thấp . khớp lệnh bán.
Ask: là giá cao. Khớp lệnh mua
Point
Spread
2. Các loại lẹnh và đặc điểm.
Lệnh thị trường: Sell, Buy
Lệnh chờ: Sell limit, buy limit, sell stop, buy stop.
Stoploss
TakeProfit
3. Yêu cầu và giới hạn giao dịch
Liên quan đến chênh giá tối thiểu
Stop Order của Spending Order căn cứ vào Open Price chứ không phụ thuộc vào giá thị
trường.
Modify: SL và TP không thể được đặt gần với giá thị trường hơn khoảng cách tối thiểu.
Một lệnh không thể thay đổi nếu SL và TP của nó nằm trong khoảng Freeze distance tính
từ giá thị trường.
III. Mở lệnh
Function OrderSend()
int OrderSend(string Symbol, int cmd, double Volume, double Price, int slippage, double SL,
double TP, string Comment=NULL, int Magic=0, datetime expiration=0, color
Arrow_Color=CLR_NONE)
- Hàm trả về ticket number hoặc -1
Để xem lỗi ta sử dụng Alert( GetLastError());
- Symbol:
- Cmd là trade type:
OP_BUY 0
OP_SELL 1
OP_BUYLIMIT 2
OP_SELLLIMIT 3
OP_BUYSTOP 4
OP_SELLSTOP5 5
- Volume:
- Price: Open Price
- Slippage: sai lệnh lớn nhất được cho phép giữa giá yêu cầu và giá thị trường đối với
lệnh thị trường. Chỉ áp dụng với lệnh thị trường . Tính theo point
- SL:
- TP:
- Comment:
- Magic: Số hiệu của robot.
- Expiration : thời hạn của lệnh chờ, sau đó nó sẽ bị xóa.
- Arrow_color: Màu của mũi tên chỉ báo.
CÁC LỖI (tra trong Error codes)
Lỗi 130: invalid Stop Order
Hàm MarketInfo(string Symbol, MODE);
Các giá trị của MODE: có 34 giá trị
MODE_LOW: low day price
MODE_HIGH:
MODE_TIME: Thời gain của tick cuối cùng được ghi nhận.
MODE_BID: giá bid cuối cùng
MODE_ASK:
MODE_POINT:
MODE_DIGITS: số chữ số sau dấu thập phân.
MODE_SPREAD:
MODE_STOPLEVEL
MODE_LOTSIZE: kích thước hợp đồng.
……….. (xem trong thuộc tính của SYMBOL)
Lỗi 129: Invalid Price.
Lỗi 134: NOT ENOUGH MONEY
MarketInfo(symbol_name, MODE_MARGINREQUIRED);
Tiền ký quỹ cho 1 lot
AccountFreeMargin()
AccountFreeMarginCheck(symbol, OP_ , Volume)

int MathFloor(double)
double NormalizeDouble(double, digit)

double WindowsPriceOnDropped()
IV. Đóng và xóa lệnh
1. Đóng lệnh
bool OrderClose(int ticket, double Volume, double Price, int Slippage, color Color)

You might also like