EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: gunlanutt on ตุลาคม 22, 2015, 10:57:45 am
-
เรียนท่าน Admin หรือท่านผู้รู้ ครับ
คือผมได้เขียนอินดิเคเตอร์ง่าย ๆ ตัวหนึ่งเพื่อคำนวณหาค่า Risk/Reward แต่ว่ามันคำนวณให้เพียงออร์เดอร์เดียว
หากผมต้องการเก็บข้อมูล แต่ละออร์เดอร์ ซึ่งในหนึ่งออร์เดอร์จะมี ราคาเปิด lot, sl, tp
แล้วนำมาคำนวณเพื่อหาความเสี่ยง/กำไร ต่อจำนวนทุนของเรา คำนวณออกมาเป็นเปอร์เซ็นต์ ผมต้องการนำทุกออร์เดอร์มาคำนวณด้วยหมดเลย
ผมต้องเขียนโค๊ดอย่างไรครับถึงจะให้เก็บข้อมูลแล้วคำนวณให้ คือผมไม่มีความรู้เรื่อง array หรือการเก็บข้อมูลเลยครับ
ท่าน admin หรือ ท่านผู้รู้ช่วยชี้แนะ เขียนโค๊ดต่อให้ผมด้วยครับ
//+------------------------------------------------------------------+
//| Risk / Reward Ratio.mq4 |
//| Bruno Gaiteiro |
//| bgaiteiro@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright ฉ 2009, bgaiteiro"
#property link "bgaiteiro@gmail.com"
#property indicator_chart_window
//---- input parameters
extern int SL_position_size = 20;
int OpenOrders=0, cnt=0;
int Order_Type=0;
int i=0;
double RiskReward_ratio=0;
double SL_price=0, TP_price=0, Open_Price=0;
double Risk=0;
double Reward=0;
string Text="";
double position_size=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
OpenOrders=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol())
{
OpenOrders++;
Open_Price = OrderOpenPrice();
TP_price = OrderTakeProfit();
SL_price = OrderStopLoss();
Order_Type = OrderType();
}
}
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
Order_Type=OrderType();
if (OrderSymbol()==Symbol())
{
if (Order_Type == OP_SELL) { Risk = ((((SL_price - Open_Price)/Point)*OrderLots()*1000))/AccountBalance();
Reward = ((((Open_Price - TP_price)/Point)*OrderLots()*1000))/AccountBalance();}
if (Order_Type == OP_BUY) { Risk = ((((Open_Price - SL_price)/Point)*OrderLots()*1000))/AccountBalance();
Reward = ((((TP_price - Open_Price)/Point)*OrderLots()*1000))/AccountBalance();}
}
}
position_size = ((((SL_position_size/Point)/1000)/(AccountBalance() * 10)/100));
Text = " Risk/Reward Ratio 1 : " + DoubleToStr(Reward/Risk,2) ;
if(OpenOrders=0){Text=" ";}
Comment(Text,
"\n Position_LotSize = ",position_size,
"\n TakeProfkt = ",Reward," % ",
"\n StopLoss = ",Risk," % ");
return(0);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
-
มีคำถาม
1.ตัวนี้เป็น Indy หรือ EA
2.ค่าที่บอกว่าออกมาแค่ค่าเดียวนี้คือ ค่าสุดท้ายหรือค่าอะไรครับ
3.ที่ต้องการให้เก็บค่าใน Array เป็นค่าอะไรครับ
-
1. ตัวนี้เป็น indicator ครับ
2. ตัวนี้ค่าที่ออกมาเป็นค่าสุดท้ายครับ แต่ที่ต้องการคือให้เก็บทุกค่าแล้วเอามาคำนวณเป็นเปอร์เซ็นต์ต่อ Account Balance() ครับ
3. ที่ต้องการให้เก็บใน Array คือค่า SL_price, TP_Price, Open_Price และ OrderType() ครับ
ขอบคุณครับ
-
ไม่รู้เขียนผิดตรงไหนครับ คืออยากให้มันเก็บข้อมูล
//+------------------------------------------------------------------+
//| Risk / Reward Ratio.mq4 |
//| Bruno Gaiteiro |
//| gunlanutt@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright ฉ 2015 Nutt Trader"
#property link "gunlanutt@gmail.com"
#property indicator_chart_window
//---- input parameters
extern int SL_position_size = 20;
int OpenOrders=0, cnt=0;
int Order_Type1=0;
int i=0;
double RiskReward_ratio=0;
double SL_price1=0, TP_price1=0, Open_Price1=0;
double Risk=0;
double Reward=0;
string Text="";
double position_size=0;
//*
double Open_Price[10];
double TP_price[10];
double SL_price[10];
double Order_Type[10];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
OpenOrders=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol())
{
OpenOrders++;
}
}
/*
Comment(Text,
"\n Position_LotSize = ",position_size,
"\n TakeProfkt = ",Reward," % ",
"\n StopLoss = ",Risk," % ");
*/
//+------------------------------------------------------------------+//+------------------------------------------------------------------+/*
int time=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol())
{
if (time==10)
{
Open_Price[10] = OrderOpenPrice();
TP_price[10] = OrderTakeProfit();
SL_price[10] = OrderStopLoss();
Order_Type[10] = OrderType();
time++;
cnt=OrdersTotal();
}
if (time==9)
{
Open_Price[9] = OrderOpenPrice();
TP_price[9] = OrderTakeProfit();
SL_price[9] = OrderStopLoss();
Order_Type[9] = OrderType();
time++;
}
if (time==8)
{
Open_Price[8] = OrderOpenPrice();
TP_price[8] = OrderTakeProfit();
SL_price[8] = OrderStopLoss();
Order_Type[8] = OrderType();
time++;
}
if (time==7)
{
Open_Price[7] = OrderOpenPrice();
TP_price[7] = OrderTakeProfit();
SL_price[7] = OrderStopLoss();
Order_Type[7] = OrderType();
time++;
}
if (time==6)
{
Open_Price[6] = OrderOpenPrice();
TP_price[6] = OrderTakeProfit();
SL_price[6] = OrderStopLoss();
Order_Type[6] = OrderType();
time++;
}
if (time==5)
{
Open_Price[5] = OrderOpenPrice();
TP_price[5] = OrderTakeProfit();
SL_price[5] = OrderStopLoss();
Order_Type[5] = OrderType();
time++;
}
if (time==4)
{
Open_Price[4] = OrderOpenPrice();
TP_price[4] = OrderTakeProfit();
SL_price[4] = OrderStopLoss();
Order_Type[4] = OrderType();
time++;
}
if (time==3)
{
Open_Price[3] = OrderOpenPrice();
TP_price[3] = OrderTakeProfit();
SL_price[3] = OrderStopLoss();
Order_Type[3] = OrderType();
time++;
}
if (time==2)
{
Open_Price[2] = OrderOpenPrice();
TP_price[2] = OrderTakeProfit();
SL_price[2] = OrderStopLoss();
Order_Type[2] = OrderType();
time++;
}
if (time==1)
{
Open_Price[1] = OrderOpenPrice();
TP_price[1] = OrderTakeProfit();
SL_price[1] = OrderStopLoss();
Order_Type[1] = OrderType();
time++;
}
if (time==0)
{
Open_Price[0] = OrderOpenPrice();
TP_price[0] = OrderTakeProfit();
SL_price[0] = OrderStopLoss();
Order_Type[0] = OrderType();
time++;
}
}
}
return(0);
}
-
ตรง time== 9 ,time==8
พวกนี้คืออะไรครับ
-
1. ตัวนี้เป็น indicator ครับ
2. ตัวนี้ค่าที่ออกมาเป็นค่าสุดท้ายครับ แต่ที่ต้องการคือให้เก็บทุกค่าแล้วเอามาคำนวณเป็นเปอร์เซ็นต์ต่อ Account Balance() ครับ
3. ที่ต้องการให้เก็บใน Array คือค่า SL_price, TP_Price, Open_Price และ OrderType() ครับ
ขอบคุณครับ
ถามที่ผมเข้าใจ คือ คุณต้องการ เอาค่า SL_price, TP_Price, Open_Price และ OrderType() ของ Order ที่กำลังเปิดอยู่มาเก็บใน array ใช้หรือเปล่าครับ
-
ขอบคุณ admin มาก มากเลยครับ แต่ตอนนี้ผมคิดว่าผมได้แล้วครับ
ผมลองเปิดโพสต์เก่า ๆ เรื่องการเก็บค่าของ zigzag จากลิงค์นี้
http://www.thaiforexea.com/index.php/topic,20.msg110.html#msg110
แล้วลองแกะโค๊ดดูครับ เพราะเห็นว่ามีการเก็บค่าเหมือนกัน อ่านซ้ำไปซ้ำมาหลายรอบ และนั่งลองผิดลองถูก ตอนนี้คิดว่าพอใจกับผลลัพธ์แล้ว
หลักการอินดิเคเตอร์ตัวนี้ก็คือ เมื่อเราเปิดออร์เดอร์ ไม่ว่าจะกี่ออร์เดอร์ก็ตาม (ในที่นี้ผมเขียนสูงสุดเพียง 10 ออร์เดอร์)
มันก็จะทำการ
- คำนวณจุดเปิดกับ tp ว่าจะได้กำไรเท่ากับกี่เปอร์เซ็นต์ของทุน (Reward)
- คำนวณจุดเปิดกับ sl ว่ามีความเสี่ยงเท่าไหร่เมื่อเทียบกับทุน (Risk)
- นำผลลัพธ์ของ risk/reward ว่ามีอัตราส่วนเท่าไหร่
อาจจะเขียนโค๊ดไม่ดีพอนะครับ เพราะไม่เข้าใจหลักการอย่างจริงๆ
ที่ลองนำมาเขียนเพราะไปอ่านเรื่องการจัดการเงินทุน เรื่องการโยนลูกเต๋า เรื่องการจัดการความเสี่ยง การล้างพอร์ต แล้วเห็นว่ามีประโยชน์น่าสนใจครับ
ขอบคุณครับผม