ตัวอย่าง EA ที่ทำงานกับหลายคู่สกุลเงิน
การพัฒนา EA ที่สามารถทำงานกับหลายคู่สกุลเงินพร้อมกันเป็นเทคนิคขั้นสูงที่ช่วยเพิ่มโอกาสในการทำกำไรและกระจายความเสี่ยง EA แบบนี้สามารถวิเคราะห์และเทรดหลายคู่สกุลเงินในเวลาเดียวกัน ทำให้สามารถใช้ประโยชน์จากโอกาสทางการตลาดได้มากขึ้น
ข้อดีของ EA ที่ทำงานกับหลายคู่สกุลเงิน:
- กระจายความเสี่ยง
- เพิ่มโอกาสในการทำกำไร
- ใช้ประโยชน์จากความสัมพันธ์ระหว่างคู่สกุลเงินต่างๆ
- เหมาะสำหรับตลาดที่มีความผันผวนต่ำ
ตัวอย่าง EA ที่ทำงานกับหลายคู่สกุลเงิน:
ต่อไปนี้เป็นตัวอย่าง EA ที่ทำงานกับ 3 คู่สกุลเงิน ได้แก่ EURUSD, GBPUSD และ USDJPY โดยใช้กลยุทธ์ Moving Average Crossover อย่างง่าย
#property copyright "Your Name"
#property link "https://www.example.com"
#property version "1.00"
#property strict
// Input parameters
input int FastMA = 10;
input int SlowMA = 20;
input double LotSize = 0.01;
// Global variables
string symbols[3] = {"EURUSD", "GBPUSD", "USDJPY"};
int magicNumbers[3] = {100001, 100002, 100003};
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Validate inputs
if(FastMA <= 0 || SlowMA <= 0 || FastMA >= SlowMA)
{
Print("Invalid MA parameters");
return INIT_PARAMETERS_INCORRECT;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// Clean up code here
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=0; i<ArraySize(symbols); i++)
{
string symbol = symbols[i];
int magicNumber = magicNumbers[i];
// Check for open positions
if(PositionExists(symbol, magicNumber))
continue;
// Get MA values
double fastMA = iMA(symbol, 0, FastMA, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(symbol, 0, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 0);
double fastMAPrev = iMA(symbol, 0, FastMA, 0, MODE_SMA, PRICE_CLOSE, 1);
double slowMAPrev = iMA(symbol, 0, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 1);
// Check for crossover
if(fastMAPrev <= slowMAPrev && fastMA > slowMA)
{
// Buy signal
double askPrice = SymbolInfoDouble(symbol, SYMBOL_ASK);
OpenOrder(symbol, OP_BUY, askPrice, magicNumber);
}
else if(fastMAPrev >= slowMAPrev && fastMA < slowMA)
{
// Sell signal
double bidPrice = SymbolInfoDouble(symbol, SYMBOL_BID);
OpenOrder(symbol, OP_SELL, bidPrice, magicNumber);
}
}
}
//+------------------------------------------------------------------+
//| Check if position exists for the given symbol and magic number |
//+------------------------------------------------------------------+
bool PositionExists(string symbol, int magicNumber)
{
for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == symbol && OrderMagicNumber() == magicNumber) return true; } } return false; } //+------------------------------------------------------------------+ //| Open a new order | //+------------------------------------------------------------------+ void OpenOrder(string symbol, int orderType, double price, int magicNumber) { int ticket = OrderSend(symbol, orderType, LotSize, price, 3, 0, 0, "Multi-currency EA", magicNumber, 0, orderType == OP_BUY ? clrGreen : clrRed); if(ticket > 0)
Print("Order opened successfully: ", symbol, " ", orderType == OP_BUY ? "Buy" : "Sell");
else
Print("Error opening order: ", GetLastError());
}
อธิบายองค์ประกอบของโค้ด:
- Input Parameters:
FastMA
และSlowMA
: ค่า period สำหรับ Moving Average เร็วและช้าLotSize
: ขนาดการเทรดต่อออเดอร์
- Global Variables:
symbols
: อาร์เรย์เก็บชื่อคู่สกุลเงินที่ต้องการเทรดmagicNumbers
: อาร์เรย์เก็บเลข magic number สำหรับแต่ละคู่สกุลเงิน
- OnInit():
- ตรวจสอบความถูกต้องของค่า input
- OnTick():
- วนลูปผ่านแต่ละคู่สกุลเงิน
- ตรวจสอบว่ามีออเดอร์เปิดอยู่หรือไม่
- คำนวณค่า Moving Average
- ตรวจสอบสัญญาณ crossover และเปิดออเดอร์ตามเงื่อนไข
- PositionExists():
- ตรวจสอบว่ามีออเดอร์เปิดอยู่สำหรับคู่สกุลเงินและ magic number ที่ระบุหรือไม่
- OpenOrder():
- เปิดออเดอร์ใหม่ด้วยพารามิเตอร์ที่กำหนด
FOREXDUCK (นามปากกา) นักเขียนของเรามีประสบการณ์การเงินการลงทุนกว่า 10 ปี มีความเชี่ยวชาญในการวิเคราะห์ตลาด Forex และคริปโต โดยเฉพาะการวิเคราะห์ทางเทคนิค รวมถึงเทคนิคต่าง