EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: momocoong on กันยายน 07, 2012, 01:55:16 pm
-
โมอยากจะตั้ง Takeprofit มห้เป็น % ของจำนวนเงินทั้งหมดอ่ะครับ
แบบว่าพอปิดออร์เดอร์แล้วก็ได้กำไรเท่า % นั้นๆเลยอ่ะครับ
แต่ ปล.ครับ กรณีมีหลายออร์เดอร์ครับ เช่น
ออร์เดอร์ที่ 1 Lots 0.01 ติดลบอยู่
ออร์เดอร์ที่ 2 Lots 0.03 ติดลบอยู่
ออร์เดอร์ที่ 3 Lots 0.09 กำลังบวก
คือต้องการคำนวณ Takeprofit ให้ปิดออร์เดอร์ทั้ง 3 ออร์เดอร์นี้ให้ได้กำไรเป็น % ของพอร์ตอ่ะครับ
จะคำนวณยังไงดี จนปัญญาแล้วจิงๆ :(
-
โมอยากจะตั้ง Takeprofit มห้เป็น % ของจำนวนเงินทั้งหมดอ่ะครับ
แบบว่าพอปิดออร์เดอร์แล้วก็ได้กำไรเท่า % นั้นๆเลยอ่ะครับ
แต่ ปล.ครับ กรณีมีหลายออร์เดอร์ครับ เช่น
ออร์เดอร์ที่ 1 Lots 0.01 ติดลบอยู่
ออร์เดอร์ที่ 2 Lots 0.03 ติดลบอยู่
ออร์เดอร์ที่ 3 Lots 0.09 กำลังบวก
คือต้องการคำนวณ Takeprofit ให้ปิดออร์เดอร์ทั้ง 3 ออร์เดอร์นี้ให้ได้กำไรเป็น % ของพอร์ตอ่ะครับ
จะคำนวณยังไงดี จนปัญญาแล้วจิงๆ :(
เอาแบบตั้ง Takeprofit คำนวณออกมาเป็น จำนวนจุดน่ะครับ
เพระาว่าถ้าใช้แบบ เอา Profit มารวมกันแล้วปิดออร์เดอร์ทั้งหมด มันจะปิดได้ไม่หมดถ้าหากเกิดการกระชากของกราฟน่ะครับ
-
extern double expectpercent = 5.0;
double pfpercent=accountprofit()*100/accountbalance();
if (expectpercent > pfpercent)
closeall();
-
ไม่มีไรยาก ก็ต้องรวม lot ทั้งหมดแล้วหาราคาเปิด เฉลี่ยทั้ง 3 Order ก่อนว่าเป็นเท่าไร จากนั่น เราได้ขนาดของ lot รวมแล้วเราก็จะรู้ว่าถ้าราคาขึ้นลง 1 จุด ตัวเงินจะเพิ่มลดเท่าไร จากนั่น ให้คำนวณหาว่าถ้าเราต้องการกำไร เป็น % ของ Balance นี้เท่ากับตัวเงินเท่าไร ก็ให้นำมาหารด้วย ตัวเงินที่เกิดจากการเปิด lot ที่พูดไปเมื่อกี้ว่าราคาขึ้นลง 1 จุดตัวเงินเปลี่ยนแปลงเท่าไร พอหารเสร็จเราจะได้ผลลัพธ์ที่เป้นจุด ว่าถ้าราคาวิ่งไปกี่จุดจากราคาเปิดเฉลี่ยทั้ง 3 Orderแล้วเท่ากับผลกำไรที่คิดเป้น % ของ Balance จากนั้นเราก็ตั้งราคาปิดได้แล้ว โม
-
อันนี้จาก EA ของผมนะครับ ThePhoenicis 127
void TheTakeProfit()
{
if (BuyOrders == 0 && SellOrders == 0)
{
gi57640 = AccountEquity();
}else
{
gi57640 = AccountBalance();
}
double val1 = AccountEquity() - gi57640;
if (val1>0)
{
double percent33 = (val1 *100) / gi57640;
if (percent33>TakeProfitPercentage)
{
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==Symbol())
{
if (OrderMagicNumber() == magic)
{
RefreshRates();
int ticket = OrderClose(OrderTicket(), OrderLots(),NormalizeDouble(OrderClosePrice(),Digits), Slippage, Red );
if(ticket>0)
{
Print("Order : ",OrderTicket(), " closed by Group order TakeProfit : " , TakeProfitPercentage , " % ($", DoubleToStr(val1,2) ," /$", DoubleToStr(gi57640,2) ,")");
}
else Print("Error close order : ",GetLastError());
}
}
}
}
}
}
}
แต่ถ้าอยากทำตาม Admin ข้างบนก็ได้นะครับ แถมยังสามารถเพิ่มให้มัน set TP ได้เลย เพราะรู้ราคาที่จะปิดแน่นอน
ที่ผมไม่ทำแบบ SET TP เพราะขี้เกียจไปเขียนฟังก์ชั่น เพราะบางโบรกเรื่องมาก ในเรื่องพวก PIP ต่ำสุดที่จะปิด หรือ เวลาปิดไรพวกนี้
-
แก้ปัญหาได้แล้วครับ
"ข้าน้อยยังอ่อนด้อยวิชายิ่งนัก หากมีเรื่องอันใดให้ช่วย ข้าน้อยจักมาใหม่นะขอรับ"
ขอบคุณท่านพี่ๆทั้งหลายขอรับ :)