指标名称:虚拟下单
版本:MT4 ver. 2.01(指标)
虚拟下单指标是一款便于交易者计算所有订单盈亏平衡价格的工具。通过模拟订单的方式,让交易者在实际交易前安全地测试和调整策略。
虚拟下单,计算盈亏平衡点位,实际上就是保本位置。
主要功能:
-
虚拟订单创建:
-
交易者可以根据需求创建虚拟订单,并手动指定每个订单的数量。
-
指标将自动计算这些虚拟订单的平均价格。
-
灵活操作:
使用鼠标即可拖动虚拟订单,实时调整订单的位置和数量。
-
适用范围:
-
对于新手交易者:帮助熟悉交易逻辑,评估交易策略的盈亏平衡点。
-
对于经验丰富的交易者:作为模拟工具,优化复杂的订单组合或验证交易计划。
使用鼠标直接拖动虚拟订单到目标位置,指标会实时更新平均价格。
通过使用虚拟下单指标,交易者可以更安全、更精准地规划交易策略,提升交易成功率。在复盘和回测过程中很有效。
参数可调整默认手数。
部分代码展示:
//+------------------------------------------------------------------+
//| 虚拟下单.mq4 |
//| Copyright © 2009-2024, www.QChaos.com |
//| https://www.qchaos.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 量化混沌, www.qchaos.com"
#property link "https://www.qchaos.com"
#property version "2.01"
#property strict
#property indicator_chart_window
#property indicator_plots 0
#property indicator_buffers 0
string iPrefix = "Price";
input double iLots = 0.01;//默认手数
struct str
{
protected:
string m_name_orders;
int m_type_orders;
double m_lots_orders;
double m_cena_orders;
MqlTick tick;
public:
string GetName(void) { return m_name_orders; }
int GetType(void) { return m_type_orders; }
double GetLots(void) { return m_lots_orders; }
double GetCena(void) { return m_cena_orders; }
void SetName(string aName) { m_name_orders = aName;}
void SetType(int aType) { m_type_orders = aType;}
void SetLots(double aLots) { m_lots_orders = aLots;}
void SetCena(double aCena) { m_cena_orders = aCena;}
void SetAWpr(string aName, datetime aTime, double aPrice)
{
ObjectSetInteger(0, iPrefix + "D" + aName, OBJPROP_TIME, 1, TimeCurrent() + PeriodSeconds() * 5);
ObjectSetDouble(0, iPrefix + "D" + aName, OBJPROP_PRICE, 1, aPrice);
}
bool CreateBuy(string aName)
{
if(!SymbolInfoTick(Symbol(), tick))
{
Print("SymbolInfoTick() failed, error = ", GetLastError());
return false;
}
m_name_orders = aName;
m_type_orders = 0;
m_lots_orders = iLots;
m_cena_orders = NormalizeDouble(tick.bid, Digits());
ButtonCreate(0, iPrefix + "A" + aName, 0, 0, 0, 30, 18, CORNER_LEFT_UPPER, "Buy", "Arial", 10, clrWhite, clrBlue, clrBlue, true, true, true, false, 0);
EditCreate(0, iPrefix + "B" + aName, 0, 10, 30, 36, 18, DoubleToString(m_lots_orders, 2), "Arial", 10, ALIGN_CENTER, false, CORNER_LEFT_UPPER, clrWhite, clrGray, clrBlue, false, false, false, 0);
TrendCreate(0, iPrefix + "D" + aName, 0, TimeCurrent() - PeriodSeconds() * 10, m_cena_orders, TimeCurrent() + PeriodSeconds() * 10, m_cena_orders, clrBlue, STYLE_SOLID, 1, false, false, false, false, true, 0);
ArrowCreate(0, iPrefix + "C" + aName, 0, TimeCurrent() + PeriodSeconds() * 10, m_cena_orders, clrBlue, STYLE_SOLID, 2, false, true, true, 0);
OrderDrag(aName);
return true;
}
bool CreateSel(string aName)
{
if(!SymbolInfoTick(Symbol(), tick))
{
Print("Symbo