我正在尝试编写这种逻辑:
if
no open orders
and
buy logic ( DayOpen - 10 * Point )
then
< / strong>buy
if
bought
Sell
when
the one
(也是唯一一个)bought order reaches Take Profit price.
这是我到目前为止所拥有的:
double DayOpen = iOpen( NULL, PERIOD_D1, 0 );
double TP = 10.0;
int ticket;
if ( OrdersTotal() == 0 && Bid == DayOpen - 10 * Point );
{ OrderSend( Symbol(),
OP_BUY,
1.0,
Ask,
0,
0,
Ask + TP * 10 * Point,
NULL,
12321,
0,
Blue
);
}
答案 0 :(得分:1)
M.C.V.E.
可以<) 代码应至少读作语法正确:
{ // outer context missing
// . // outer context missing
// .. // outer context missing
// ... // outer context missing
RefreshRates(); // a life-saving jacket while // outer context missing
if ( OrdersTotal() == 0
&& Bid <= iOpen( _Symbol, PERIOD_D1, 0 )
- ( 10 * _Point )
)
{ OrderSend( _Symbol, // <symbol>
OP_BUY, // <op>
1.0, // <volume>
Ask, // <XTO_price>
0, // <slippage_allowed>
0, // <autoXTO_SL>
NormalizeDouble( Ask + 10 * _Point, // **ALWAYS**
_Digits // NORMALIZE XTO levels
), // <autoXTO_TP>
NULL, // <commentSTRING>
12321, // <MagNUM>
0, // <expireSECONDs>
clrBlue // <arrowCOLOR>
);
}
// ...
// ..
// .
}
无需为给定逻辑添加任何其他构造。 MetaTrader Terminal 4
会将 OrderSend()
详细信息发送到远程 MetaTrader 4 Server
< / strong> 如果您的值确实符合经纪人条款&amp;条件,您将获得这样的交易头寸(暴露于市场风险,同时得到完全支持并由您的权益覆盖)。
与此同时, MetaTrader 4
Server
将确保此类位置无需其他代码 <autoXTO_TP>
- 在FX-Market达到预定义的TP
终止级别时终止。
虽然上述情况属实,但可以公平地说,专业级算法交易系统有许多其他公用事业服务,附在核心交易逻辑上。只是为了有所了解,生产级系统中常见的设计约为80.000~100.000 SLOC
。
重新阅读 MQL4
文档 可能会有所帮助(让我更清楚一点 - localhost已安装并更新了 实际发布的 - 新 - MQL4
语言...网络上的静态和“旧”文本,因为语法规则和特定于上下文的限制很多......仍然如此,参见下文)
而不是而不是再次使用“旧” - MQL4
语法代码片段进行另一个问题。
MQL4
语言在过去几年中发展很多,很多网站发布的代码片段已经失去了解释价值,因为范式发生了很多变化,发生在“语言内部”或由于代码执行平台更改。
苦?是的。
痛苦?是的。
这是 the Life ,但是......
答案 1 :(得分:0)
所以,我认为你已经掌握了逻辑的第一部分(开始交易)。现在您希望所有订单在其中一个达到TP时关闭。这是你如何做到的。
将此添加到start()
功能:
int total = OrdersHistoryTotal();
for (int i = total - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false)
{
Print("Error selecting order from history: ", GetLastError());
break;
}
if ((OrderSymbol() != Symbol()) || (OrderType() != OP_BUY) || (OrderClosePrice() < OrderTakeProfit())) continue;
CloseAll();
break;
}
这在start()
函数之外:
void CloseAll()
{
int total = OrdersTotal();
for (int i = total - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS) == false) continue;
if ((OrderSymbol() != Symbol()) || (OrderType() != OP_BUY)) continue;
RefreshRates();
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);
}
}