prostotrader:
你好!
从未使用过ST和TP
请澄清一下。
在现有头寸上设置止损和止盈
或者我们可以在正在设置的订单中设置这些参数,即在尚未开仓时设置?
如果我们可以在订单中指定参数,那么在市场订单中我们应该如何计算SL和TP(仓位价格 不固定)?
你可以指定任何参数,级别存储在服务器上。 同一个服务器可以拒绝执行你的止损。
这就是为什么我不希望得到服务器的拒绝。
也就是说,是否最好设置为现有的位置(以确定)?
prostotrader:
这就是为什么我不希望得到服务器的拒绝。
也就是说,是否在现有的位置上安装更好(以确定)?
根本就不应该设置止损点,把限制器。
Sergey Chalyshev:
为什么不写没有拐杖的函数呢,这些拐杖都储存在服务器上。
立即写下限制。或者至少是有限制的TR,以及尽可能的SL。
而且因为我可能会公布班级代码。
我不需要它,但初学者可能需要它。
void CFORTSOrder::SetSlTp(const string a_symbol, const double a_sl=0, const double a_tp=0)
{
if(PositionSelect(a_symbol))
{
ulong pos_ticket = ulong(PositionGetInteger(POSITION_TICKET));
ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
double sl_level = PositionGetDouble(POSITION_SL);
double tp_level = PositionGetDouble(POSITION_TP);
MqlTradeRequest request = {0};
MqlTradeResult result = {0};
mem_magic = magic_storage + 1;
if(magic_storage >= (magic_number + 65530)) mem_magic = magic_number;
request.symbol = a_symbol;
request.action = TRADE_ACTION_SLTP;
request.comment = "Установка SL/TP";
request.magic = mem_magic;
request.position = pos_ticket;
switch(pos_type)
{
case POSITION_TYPE_BUY:
if (a_sl == 0)
{
request.sl = sl_level;
}
else
if(a_sl <= sl_level)
{
request.sl = a_sl;
}
else request.sl = sl_level;
if (a_tp == 0)
{
request.tp = tp_level;
}
else
if(a_tp >= tp_level)
{
request.tp = a_tp;
}
else request.tp = tp_level;
break;
case POSITION_TYPE_SELL:
if (a_sl == 0)
{
request.sl = sl_level;
}
else
if(a_sl >= sl_level)
{
request.sl = a_sl;
}
else request.sl = sl_level;
if (a_tp == 0)
{
request.tp = tp_level;
}
else
if(a_tp <= tp_level)
{
request.tp = a_tp;
}
else request.tp = tp_level;
break;
}
if(OrderSend(request, result))
{
if(result.retcode == TRADE_RETCODE_DONE)
{
magic_storage = mem_magic;
Print(__FUNCTION__, ": SL и/или TP установлен.");
}
}
else Print(__FUNCTION__, ": SL и/или TP не установлен.");
}
}
{
if(PositionSelect(a_symbol))
{
ulong pos_ticket = ulong(PositionGetInteger(POSITION_TICKET));
ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
double sl_level = PositionGetDouble(POSITION_SL);
double tp_level = PositionGetDouble(POSITION_TP);
MqlTradeRequest request = {0};
MqlTradeResult result = {0};
mem_magic = magic_storage + 1;
if(magic_storage >= (magic_number + 65530)) mem_magic = magic_number;
request.symbol = a_symbol;
request.action = TRADE_ACTION_SLTP;
request.comment = "Установка SL/TP";
request.magic = mem_magic;
request.position = pos_ticket;
switch(pos_type)
{
case POSITION_TYPE_BUY:
if (a_sl == 0)
{
request.sl = sl_level;
}
else
if(a_sl <= sl_level)
{
request.sl = a_sl;
}
else request.sl = sl_level;
if (a_tp == 0)
{
request.tp = tp_level;
}
else
if(a_tp >= tp_level)
{
request.tp = a_tp;
}
else request.tp = tp_level;
break;
case POSITION_TYPE_SELL:
if (a_sl == 0)
{
request.sl = sl_level;
}
else
if(a_sl >= sl_level)
{
request.sl = a_sl;
}
else request.sl = sl_level;
if (a_tp == 0)
{
request.tp = tp_level;
}
else
if(a_tp <= tp_level)
{
request.tp = a_tp;
}
else request.tp = tp_level;
break;
}
if(OrderSend(request, result))
{
if(result.retcode == TRADE_RETCODE_DONE)
{
magic_storage = mem_magic;
Print(__FUNCTION__, ": SL и/или TP установлен.");
}
}
else Print(__FUNCTION__, ": SL и/или TP не установлен.");
}
}
你好!
从未使用过SL和TP
请澄清一下。
在现有头寸上设置止损和止盈
或者我们可以在正在设置的订单中设置这些参数,即在尚未开仓时设置?
如果我们可以在订单中指定参数,那么在市场订单中我们应该如何计算SL和TP(仓位价格 不固定)?