ฉันต้องการตั้งค่าโปรไฟล์ Profit และ Stop Loss จำนวนมากพร้อมกันทั้งหมด!
สวัสดีครับ/ค่ะ จาก fx เล็กๆ น้อยๆ ครับ/ค่ะ
เอาล่ะ ตามชื่อหัวข้อเลยนะครับ/ค่ะ,EAつくーるผมได้สร้างโปรเจ็กต์ที่อิงจากโค้ดที่ output โดย EAつくーる เพื่อให้ตั้งค่ากำไรและจุดสตอปลอสสำหรับหลายๆ ตำแหน่งพร้อมกัน
เหมือนกับยากล่อมสำหรับโรคポジポジใช่ไหมครับ/ค่ะ (?)
เอาล่ะ ไปกันเลย เรามาดูฟังก์ชันกัน
//+--------------------------------------------------------------------------------------------------------+
//| ポジションおよび待機中注文のストップロスおよびテイクプロフィットを一括で変更する関数 |
//| 処理: 指定したシンボルのすべてのポジションおよびリミットオーダーのストップロスおよびテイクプロフィット |
//| を一括で変更 |
//| 引数: symbol - 通貨ペア |
//| newStopLoss - 新しいストップロス値(指定通貨ペアの価格で指定) |
//| newTakeProfit - 新しいテイクプロフィット値(指定通貨ペアの価格で指定) |
//| orderType - 注文タイプ(OP_BUY、OP_SELLを指定。-1の場合は全てを対象とする) |
//| 戻り値: なし |
//+--------------------------------------------------------------------------------------------------------+
void updateAllStopLossAndTakeProfit(string symbol, double newTakeProfit, double newStopLoss, int orderType = -1)
{
// オープンポジションおよび待機中注文のストップロスとテイクプロフィットを変更
for (int i = 0; i < OrdersTotal(); i++)
{
// 注文を選択
if (OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == symbol)
{
int currentOrderType = OrderType();
// 指定された注文タイプのみ処理(orderTypeが-1の場合はすべて)
if (orderType == -1 || currentOrderType == orderType)
{
// 新しいストップロスまたはテイクプロフィットが現在の値と異なる場合に処理
if ((newStopLoss == 0 || OrderStopLoss() != newStopLoss) ||
(newTakeProfit == 0 || OrderTakeProfit() != newTakeProfit))
{
// オープンポジションの場合
if ((currentOrderType == OP_BUY &&
(newStopLoss == 0 || newStopLoss < Bid) &&
(newTakeProfit == 0 || newTakeProfit > Bid)) ||
(currentOrderType == OP_SELL &&
(newStopLoss == 0 || newStopLoss > Ask) &&
(newTakeProfit == 0 || newTakeProfit < Ask)))
{
bool result = OrderModify(OrderTicket(), OrderOpenPrice(), newStopLoss, newTakeProfit, 0);
if (result)
{
Print("Successfully updated Stop Loss and Take Profit for order #", OrderTicket());
}
else
{
Print("Failed to update Stop Loss and Take Profit for order #", OrderTicket(), ". Error: ", GetLastError());
}
}
// 待機中のリミットオーダーの場合
else if ((currentOrderType == OP_BUYLIMIT &&
(newStopLoss == 0 || newStopLoss < Bid) &&
(newTakeProfit == 0 || newTakeProfit > Bid)) ||
(currentOrderType == OP_SELLLIMIT &&
(newStopLoss == 0 || newStopLoss > Ask) &&
(newTakeProfit == 0 || newTakeProfit < Ask)))
{
bool result = OrderModify(OrderTicket(), OrderOpenPrice(), newStopLoss, newTakeProfit, 0);
if (result)
{
Print("Successfully updated Stop Loss and Take Profit for pending order #", OrderTicket());
}
else
{
Print("Failed to update Stop Loss and Take Profit for pending order #", OrderTicket(), ". Error: ", GetLastError());
}
}
else
{
Print("Invalid Stop Loss or Take Profit level for order #", OrderTicket());
}
}
}
}
}
}วิธีการใช้งานเป็นแบบนี้ครับ/ค่ะ
กรณีตำแหน่งซื้อ
updateAllStopLossAndTakeProfit("USDJPY", 160, 159, OP_BUY);
กรณีตำแหน่งขาย
updateAllStopLossAndTakeProfit("USDJPY", 159, 160, OP_SELL);
ง่ายใช่ไหมครับ/ค่ะ
*ตำแหน่งที่จองไว้ก็ถูกเปลี่ยนแปลงพร้อมกันด้วยนะครับ/ค่ะ
EAつくーるกฎระเบียบต่อไปนี้ยังคงใช้ได้ ดังนั้นด้านล่างนี้ก็ได้ครับ/ค่ะ
อาจจะดีที่จะตั้งค่าผ่าน input parameters ด้วยการใส่ค่าเข้าไปในอินพุต
input double newBuyProfitPrice = 0; // ราคากำไรเป้าหมาย新สำหรับตำแหน่งซื้อ(Take Profit) input double newBuyStopLossPrice = 0; // ราคาหยุดขาดทุนใหม่สำหรับตำแหน่งซื้อ(Stop Loss) input double newSellProfitPrice = 0; // ราคากำไรเป้าหมายใหม่สำหรับตำแหน่งขาย(Take Profit) input double newSellStopLossPrice = 0; // ราคาหยุดขาดทุนใหม่สำหรับตำแหน่งขาย(Stop Loss)
// 更新 Take Profit และ Stop Loss สำหรับตำแหน่งซื้อ updateAllStopLossAndTakeProfit(Symbol(), newBuyProfitPrice, newBuyStopLossPrice, OP_BUY); // 更新 Take Profit และ Stop Loss สำหรับตำแหน่งขาย updateAllStopLossAndTakeProfit(Symbol(), newSellProfitPrice, newSellStopLossPrice, OP_SELL);
แล้วพบกันใหม่นะครับ/ค่ะ
ไฟล์ดาวน์โหลดอยู่ด้านล่างนี้
× ![]()