ระบบ Triangle Arbitrage เทคนิคการเทรด Forex Arbitrage การ Headging 3 คู่เงิน พร้อมแจก EA
Arbitrage คือ การ ทำกำไรจากสินค้าชนิดเดียวกันใน 2 ตลาด ซึ่งราคาของสินค้านั้นใน2 ตลาดจะต่างกันอยู่นิดหน่อย คล้ายๆกับว่า เราซื้อของจากตลาดค้าส่ง มาขายที่ตลาดค้าปลีก เราก็จะได้กำไรจากส่วนต่างราคา ถ้าเรามีทุนมาก ก็จะสามารถทำกำไรได้มาก ซึ่งการทำกำไรแบบนี้ เรียกว่าไม่มีความเสี่ยง หรือความเสี่ยงน้อยมาก
ตัวอย่างเช่น ถ้าเรารู้ว่า ร้านทอง A ขายทองในราคา บาทละ20,000 บาท และเรารู้ว่าร้านทอง B รับซื้อทองที่ราคา บาทละ20,100บ. เราจึงทำการนำเงิน 100,000 บ. ไปซื้อทองแท่งจากร้าน A มา5บาท และนำไปขายที่ร้าน B เราจะขายได้เงินมา 100,500 บ. และได้ส่วนต่างกำไรของ2ร้าน คือ 500 บ. นี่คือกำไรที่เราได้จากการ ทำกำไรจากสินค้าชนิดเดียวกันใน 2 ตลาด
แต่ในความเป็นจริง จะหาโอกาสแบบนี้ได้ยากมาก เพราะร้านทอง ก็จะมีค่ากำเหน็จ ค่าส่วนต่างราคาซื้อ ราคาขาย ซึ่งเปลี่ยนแปลงตลอดเวลา ยิ่งถ้าเป็นร้านทองในประเทศไทย ราคาก็จะอ้างอิงจากราคากลางสมาคมค้าทองคำ ราคาแต่ละร้าน ก็แทบจะไม่แตกต่างกัน แต่เราอาจจะทำกำไร จากราคาทองจากตลาดที่อยู่ห่างไกลกันมาก ๆได้ เช่นที่ ญี่ปุ่น กับตลาดไทย หรือตลาดลอนดอนก็ได้ แต่ก็คงไม่คุ้มค่าเดินทาง
แต่ในตลาด Forex เทคนิคการทำ Arbitrage มีหลากหลายวิธี เราจะลองเอามาดูกันบางวิธีดังนี้ วิธีที่1 การทำ Arbitrage โดยช่องว่าง ความเร็วของราคาของ 2 broker หลายๆท่านอาจจะใช้เทคนิคนี้กันมาบ้าง โดย Liquidity Provider บางเจ้า กราฟก็จะเร็วกว่า Broker ที่ไปซื้อราคากราฟมา ถ้าเราเจอ Broker นี้ แต่ก็จะติดปัญหาเรื่อง Spread ทำให้หาช่องทางทำกำไรยากขึ้น แต่ถ้าเราเข้า Trade ช่วงข่าว ราคาก็จะกระโดดข้าม Spread ไปได้ แต่ถ้า Broker ตรวจพบว่าเราใช้วิธีนี้ Account เราอาจจะโดนแบนได้ หรืออาจจะไม่สามารถถอนเงินได้ เพราะ Broker ก็ต้องป้องกันตัวเองสุดฤทธิ์เช่นกัน
วิธีที่2 การทำ Arbitrage จากช่องว่างของดอกเบี้ย Swap ข้ามคืน หลายๆคนอาจจะรู้จักในชื่อ การ
Carry Trade คือการหา Broker 2 Broker โดย Broker หนึ่ง Swap เป็นบวก และอีก Broker Swap เป็น 0 ซึ่งเราจะ Trade ในคู่เงินเดียวกันแต่เล่นตรงกันข้าม เช่น Broker A ถ้า Sell Gold Swap จะเป็น บวก ส่วน Broker B ถ้า Buy Gold Swap จะเป็น 0 เหมือนเป็นการ Hedging ข้าม Broker ดูเหมือนจะไม่ได้กำไร แต่ในความเป็นจริงแล้ว เราสามารถได้กำไรจากค่า Swap ข้ามคืน จาก Broker ที่ Swap เป็นบวก ยิ่งคืนวันพุธได้ Swap 3 เท่า แต่ปัญหาคือ เราต้อง Re Balance Port คือ เอาเงินจากพอร์ตที่กำไร มาเติมให้ฝั่งที่ขาดทุน เพื่อประคองให้พอร์ตยังอยู่ได้ เราก็จะสามารถเก็บค่า Swap ไปได้เรื่อย ๆ นานเท่าไหร่ก็ได้ โดยที่แทบไม่มีความเสี่ยงเลย
วิธีที่3 การทำ Arbitrage Triangularก็คือการ Hedging 3 คู่เงิน หรือการแลกเปลี่ยนเงินตรา 3 ค่า แล้วได้กำไรจากส่วนต่างของราคา เช่น นำเงิน USD ไปแลก EUR แล้วนำเงิน EUR ไปแลกเงิน GBP สุดท้ายนำ GBP กลับไปแลก USD
USD -> EUR -> GBP -> USDซึ่ง Rate การแลกเปลี่ยนของแต่ละคู่เงิน จะไม่เท่ากัน ในบางครั้ง จะสามารถทำกำไรจาก Rate ตรงนี้ได้
คู่เงินที่สามารถทำ Arbitrage กันได้ เช่น
Buy AUDUSD
Sell AUDJPY
Buy USDJPY
หรือ
Sell AUDUSD
Buy AUDJPY
Sell USDJPY
Buy USDCAD
Sell USDJPY
Buy CADJPY
Buy EURUSD
Sell EURJPY
Buy USDJPY
Buy USDCHF
Sell USDJPY
Buy CHFJPY
Sell EURNZD
Buy EURUSD
Sell NZDUSD
เป็นต้น หรืออาจจะมีบางคนทำมากกว่า 3 คู่เงินก็ได้
ข้อควรระวัง ในการ ทำ Arbitrage คือ Broker ส่วนใหญ่จะไม่อนุญาตให้เราทำ ควรศึกษาให้ดี
วันนี้เรามีตัวอย่าง
Source EA การทำ Arbitrage Triangle ซึ่งเราจะใส่กี่คู่เงินก็ได้ เลือก Buy หรือ Sell คู่ไหนก็ได้ และใส่ Lot เท่าไหร่ก็ได้
แต่การทำงานของ EA อาจจะยังไม่สมบูรณ์ตรงที่ว่า 1. ยังไม่รู้ว่าเวลาไหนควรเข้า Order Arbitrage ชุดไหน
2. เมื่อ ผลรวม Profit ของArbitrage เป็นลบ ต้องแก้ไขอย่างไร
ใครที่ลองนำไปใช้แล้ว มีไอเดียปรับปรุง เพื่อให้นำไปใช้งานจริงได้ ก็ลองเสนอไอเดียมาได้ใน Comment เลยนะครับ เผื่อว่าเพื่อนๆคนอื่น ๆ ได้เห็นแนวทางปรับปรุงด้วยครับ
Source EA ตัวนี้สามารถนำไปใช้ทำ Correlation ก็ได้ครับ
//+------------------------------------------------------------------+
//| multi-correlationV1.mq4 |
//| Copyright 2019, Pok Software Corp. |
//| http://www.facebook.com/anubanforex |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Pok Software Corp."
#property link "http://www.facebook.com/anubanforex"
#property version "1.00"
#property strict
string BotName = " multi-correlation ";
extern int MagicNumber = 53098; //
extern int MaxSlippage = 3;
//extern string SymbolMulti = "NZDJPY,AUDUSD,USDJPY,CHFJPY,EURUSD,EURCHF,GBPCHF,USDCHF,EURGBP,GBPUSD,NZDUSD,EURJPY,GBPJPY,AUDJPY";
//extern string LotMulti = "0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02";
extern string SymbolMulti = "AUDUSD,USDJPY,EURUSD,NZDUSD,EURJPY";
extern string LotMulti = "0.02,0.02,0.02,0.02,0.02";
extern string BUY0SELL1 = "0,0,1,0,0";
extern double DollarTP = 3.0; //
extern bool RunEA = false;
string symbArray[];
string lotArray[];
string Buy0Sell1Array[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(RunEA == true)
{
int sizesymb = splitStr2Array(SymbolMulti,",",symbArray);
int sizelot = splitStr2Array(LotMulti,",",lotArray);
int sizeBS = splitStr2Array(BUY0SELL1,",",Buy0Sell1Array);
OrderOpen();
}
CheckProfit(MagicNumber);
//---
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OrderOpen()
{
int ticket;
string comment;
if(CountTrades(MagicNumber) == 0)
{
for(int i=0;i<ArraySize(symbArray);i++)
{
comment = StringConcatenate(BotName,"::",Buy0Sell1Array[i]," ",symbArray[i]," ",lotArray[i]," Lot.");
//Print(comment);
ticket =OpenOrder((int)Buy0Sell1Array[i],symbArray[i],(double)lotArray[i],comment,MagicNumber);
}
}
}
//+------------------------------------------------------------------+
int OpenOrder(int iBuySell,string iSymbol,double iLot,string iComment,int magic)
{
int ticket;
int BIDASK=0;
if(iBuySell == OP_BUY) BIDASK = MODE_ASK;
if(iBuySell == OP_SELL) BIDASK = MODE_BID;
do
{
ticket=OrderSend(iSymbol,iBuySell,iLot,MarketInfo(iSymbol,BIDASK),MaxSlippage,0,0,iComment,magic,0,clrGreen);
//if(ticket < 0 )Print(iComment," OrderSend failed with error #",GetLastError());
}while ( ticket < 0 );
return (ticket);
}
//+------------------------------------------------------------------+
void CheckProfit(int magic)
{
double profit=0.0;
//---
if(CountTrades(magic) == 0) return;
int total=OrdersTotal();
// write open orders
for(int pos=0;pos<total;pos++)
{
if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
if(OrderMagicNumber() == magic )
{
profit = profit + OrderProfit()+OrderSwap();
}
}
Print("profit=",profit);
if(profit >= DollarTP)
{
TakeProfit(magic);
Sleep(60*60*60);
}
}
//+------------------------------------------------------------------+
bool TakeProfit(int magic)
{
bool ticketBUY;
bool ticketSELL;
for (int trade = OrdersTotal()-1 ; trade >=0 ; trade--)
{
ticketBUY = false;
ticketSELL = false;
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber() == magic)
{
switch(OrderType())
{
case OP_BUY :
{
while(!ticketBUY)
{
ticketBUY = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),MaxSlippage,Violet);
}
}break;
case OP_SELL :
{
while(!ticketSELL)
{
ticketSELL = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),MaxSlippage,Violet);
}
}break;
}
}
}
return (true);
}
//+-----------------------------------------------------------------------+
int CountTrades(int magic) {
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber() == magic){
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
}
}
return (count);
}
//+------------------------------------------------------------------+
int splitStr2Array(string str,string sep,string &Arrayref[])
{
ushort u_sep;
u_sep=StringGetCharacter(sep,0);
int k1 = StringSplit(str,u_sep,Arrayref);
if(k1>0)
{
return( k1);
}
return(0);
}
//+------------------------------------------------------------------+