[MT4相关]MagicNumber: 定单的“魔法“识别符
1. 历史[backcolor=rgb(251, 251, 252)]在МТ3中,开仓的管理是非常费时的。交易者在处理开仓和平仓列表时,设置执行的工具是限定的。在区分“自己”和“他人”仓位时,方法非常复杂。在 МТ4中,状况有了明显的改变。现在,交易者可以使用多种函数来管理开仓,挂单并且获取平仓信息。[/backcolor]
[backcolor=rgb(251, 251, 252)]以MagicNumber命名的特殊参数被添加到定单识别符中。这个参数就是我们文章中将提及到的主题。 [/backcolor]
2.什么是 MagicNumber?[backcolor=rgb(251, 251, 252)]MQL4 参考: [/backcolor]
[backcolor=rgb(251, 251, 252)]int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) … magic - 定单魔法数字。可以使用指定识别符。[/backcolor]
[backcolor=rgb(251, 251, 252)] 即,当定单被放置时,可以给定单指定独有的数字。这个数字将用于区分其他定单。当手动交易时,不使用(尽可能)这个特性,但是在智能交易(自动交易)运作时,此特性是不可替代的。[/backcolor]
[backcolor=rgb(251, 251, 252)] 范例1: 在客户端内交易者和智能交易同时运行。 任务: 智能交易的运行必须按照它自己的形式计算,对于手动开仓不会干涉。 解决: 开仓的智能交易必须指定独特的MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的 MagicNumber 的定单。[/backcolor]
[backcolor=rgb(251, 251, 252)]范例 2: 在客户端内两个不同计算方法的智能交易同时运行。 任务: 智能交易只管理自己的定单。. 解决: 当开仓时,每个智能交易必须使用自己的 MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的MagicNumber的定单。[/backcolor]
[backcolor=rgb(251, 251, 252)]范例 3: 在客户端内几个智能交易,交易者和协助智能交易执行的不标准追踪止损同时运行。 任务: 交易的智能交易必须按照自己的形式计算,并且不干涉手动开仓。协助智能交易执行的追踪止损可以在手动开仓处修改,但是其他智能交易不能够开仓。 解决: 智能交易必须使用独有的MagicNumbers并且管理自己的仓位。协助智能交易修改的这些仓位,其 MagicNumber等于 0。[/backcolor]
[backcolor=rgb(251, 251, 252)]以上三个范例都很现实,用户可以提前解决问题。在这三个范例情况中,都是使用MagicNumber来解决问题的。这不是唯一解决问题的途径,但是最简单的途径。 [/backcolor]
3. 实践[backcolor=rgb(251, 251, 252)]现在让我们来解决特殊的任务:创建智能交易只管理自己的仓位,不理睬手动仓位和其他智能交易。[/backcolor]
[backcolor=rgb(251, 251, 252)]首先我们编写一个简单的智能交易,当 MACD 指标零线时,智能交易得到信号开仓。智能交易将会运行如下: [/backcolor]
int
start
()
{
//---- 记住将要分析的指标值
//---- 注意:我们使用第一个和第二个柱。可以是每日的 1-bar 。
//---- (即., 信号晚些显现), 但是保护反复开仓和平仓
//---- 在柱内仓位的
double
MACD_1
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
1
)
;
double
MACD_2
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
2
)
;
int
_GetLastError
=
0
,
_OrdersTotal
=
OrdersTotal
()
;
//---- 在开仓中搜索
for
(
int
z
=
_OrdersTotal
-
1
;
z
>=
0
;
z
--
)
{
//---- 如果在选择仓位中生成错误,转到下一步
if
(
!
OrderSelect
(
z
,
SELECT_BY_POS
)
)
{
_GetLastError
=
GetLastError
()
;
Print
(
"
OrderSelect(
"
,
z
,
"
, SELECT_BY_POS ) - Error #
"
,
_GetLastError
)
;
continue
;
}
//---- 如果开仓不是当前货币对,略过
if
(
OrderSymbol
()
!=
Symbol
()
)
continue
;
//---- 如果开仓为BUY,
if
(
OrderType
()
==
OP_BUY
)
{
//---- 如果 MACD指标看到的零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Bid
,
5
,
Green
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出: 开仓尚早
else
return
(
0
)
;
}
//---- 如果开仓位SELL,
if
(
OrderType
()
==
OP_SELL
)
{
//----如果MACD指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Ask
,
5
,
Red
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"
错误 OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出
:开仓尚早
else
return
(
0
)
;
}
}
//+------------------------------------------------------------------+
//| 如果达到此点,没有仓位开仓
|
//| 检测是否仍有开仓的可能
|
//+------------------------------------------------------------------+
//---- 如果MACD 指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 开BUY仓
if
(
OrderSend
(
Symbol
()
,
OP_BUY
,
0.1
,
Ask
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
0
,
0
,
Green
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
//----如果MACD 指标看到零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 开 SELL 仓
if
(
OrderSend
(
Symbol
()
,
OP_SELL
,
0.1
,
Bid
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
0
,
0
,
Red
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
return
(
0
)
;
}
[backcolor=rgb(251, 251, 252)] 这样我们得到以下图表,看看它怎样运行:[/backcolor]
[backcolor=rgb(251, 251, 252)] [/backcolor]
[backcolor=rgb(251, 251, 252)] [/backcolor]
[backcolor=rgb(251, 251, 252)]都不错,但是这里有个问题存在。如果在智能交易执行期间开仓,智能交易将会默认为这个仓位为自己的仓位。这是我们不想看到的。[/backcolor]
[backcolor=rgb(251, 251, 252)]我们将按照以下方法让它管理自己的仓位:[/backcolor]
[list] [*]以Expert_ID 命名添加外部变量协助智能交易开仓来改变 MagicNumber 值 [*]在函数OrderSelect()选择仓位之后,对编译Expert_ID变量所选定单的MagicNumber 添加检测 [*]在开仓期间,我们将在MagicNumber处写下 Expert_ID的值替换 0 [/list][backcolor=rgb(251, 251, 252)]考虑上面的变化,代码将显现如下: [/backcolor]
extern
int
Expert_ID
=
1234
;
int
start
()
{
//----
记住将要分析的指标值
//---- 注意:我们使用第一个和第二个柱。可以是每日的 1-bar 。
//---- (即., 信号晚些显现), 但是保护反复开仓和平仓
//---- 在柱内仓位的
double
MACD_1
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
1
)
;
double
MACD_2
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
2
)
;
int
_GetLastError
=
0
,
_OrdersTotal
=
OrdersTotal
()
;
//---- 在全部开仓中搜索
for
(
int
z
=
_OrdersTotal
-
1
;
z
>=
0
;
z
--
)
{
//---- 如果在搜索仓位中生成错误。转到下一步
if
(
!
OrderSelect
(
z
,
SELECT_BY_POS
)
)
{
_GetLastError
=
GetLastError
()
;
Print
(
"
OrderSelect(
"
,
z
,
"
, SELECT_BY_POS ) -错误 #
"
,
_GetLastError
)
;
continue
;
}
//---- 如果平仓仓位不是当前货币对,略过
if
(
OrderSymbol
()
!=
Symbol
()
)
continue
;
//---- 如果MagicNumber 不等于Expert_ID, 忽略此仓位
if
(
OrderMagicNumber
()
!=
Expert_ID
)
continue
;
//---- 如果开BUY仓,
if
(
OrderType
()
==
OP_BUY
)
{
//---- 如果MACD 指标看到零线从上到下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Bid
,
5
,
Green
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"
错误 OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变, 退出: 开仓尚早
else
{
return
(
0
)
;
}
}
//---- 如果开SELL仓,
if
(
OrderType
()
==
OP_SELL
)
{
//---- 如果MACD指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Ask
,
5
,
Red
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderClose №
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出: 开仓尚早
else
return
(
0
)
;
}
}
//+------------------------------------------------------------------+
//| 如果执行达到此点,没有仓位开仓
|
//| 检测是否有可能开仓
|
//+------------------------------------------------------------------+
//---- 如果MACD 指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 开BUY仓
if
(
OrderSend
(
Symbol
()
,
OP_BUY
,
0.1
,
Ask
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
Expert_ID
,
0
,
Green
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
//---- 如果MACD 指标看到零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 开SELL仓
if
(
OrderSend
(
Symbol
()
,
OP_SELL
,
0.1
,
Bid
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
Expert_ID
,
0
,
Red
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
return
(
0
)
;
}
[backcolor=rgb(251, 251, 252)] 现在,当智能交易运行时,用户可以手动开仓。智能交易将不会干涉。[/backcolor]
macd_test1.jpgmacd_test1.jpg
[backcolor=rgb(251, 251, 252)]以MagicNumber命名的特殊参数被添加到定单识别符中。这个参数就是我们文章中将提及到的主题。 [/backcolor]
2.什么是 MagicNumber?[backcolor=rgb(251, 251, 252)]MQL4 参考: [/backcolor]
[backcolor=rgb(251, 251, 252)]int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) … magic - 定单魔法数字。可以使用指定识别符。[/backcolor]
[backcolor=rgb(251, 251, 252)] 即,当定单被放置时,可以给定单指定独有的数字。这个数字将用于区分其他定单。当手动交易时,不使用(尽可能)这个特性,但是在智能交易(自动交易)运作时,此特性是不可替代的。[/backcolor]
[backcolor=rgb(251, 251, 252)] 范例1: 在客户端内交易者和智能交易同时运行。 任务: 智能交易的运行必须按照它自己的形式计算,对于手动开仓不会干涉。 解决: 开仓的智能交易必须指定独特的MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的 MagicNumber 的定单。[/backcolor]
[backcolor=rgb(251, 251, 252)]范例 2: 在客户端内两个不同计算方法的智能交易同时运行。 任务: 智能交易只管理自己的定单。. 解决: 当开仓时,每个智能交易必须使用自己的 MagicNumber(零除外)。接下来的日子里,智能交易只会管理提前设定的MagicNumber的定单。[/backcolor]
[backcolor=rgb(251, 251, 252)]范例 3: 在客户端内几个智能交易,交易者和协助智能交易执行的不标准追踪止损同时运行。 任务: 交易的智能交易必须按照自己的形式计算,并且不干涉手动开仓。协助智能交易执行的追踪止损可以在手动开仓处修改,但是其他智能交易不能够开仓。 解决: 智能交易必须使用独有的MagicNumbers并且管理自己的仓位。协助智能交易修改的这些仓位,其 MagicNumber等于 0。[/backcolor]
[backcolor=rgb(251, 251, 252)]以上三个范例都很现实,用户可以提前解决问题。在这三个范例情况中,都是使用MagicNumber来解决问题的。这不是唯一解决问题的途径,但是最简单的途径。 [/backcolor]
3. 实践[backcolor=rgb(251, 251, 252)]现在让我们来解决特殊的任务:创建智能交易只管理自己的仓位,不理睬手动仓位和其他智能交易。[/backcolor]
[backcolor=rgb(251, 251, 252)]首先我们编写一个简单的智能交易,当 MACD 指标零线时,智能交易得到信号开仓。智能交易将会运行如下: [/backcolor]
int
start
()
{
//---- 记住将要分析的指标值
//---- 注意:我们使用第一个和第二个柱。可以是每日的 1-bar 。
//---- (即., 信号晚些显现), 但是保护反复开仓和平仓
//---- 在柱内仓位的
double
MACD_1
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
1
)
;
double
MACD_2
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
2
)
;
int
_GetLastError
=
0
,
_OrdersTotal
=
OrdersTotal
()
;
//---- 在开仓中搜索
for
(
int
z
=
_OrdersTotal
-
1
;
z
>=
0
;
z
--
)
{
//---- 如果在选择仓位中生成错误,转到下一步
if
(
!
OrderSelect
(
z
,
SELECT_BY_POS
)
)
{
_GetLastError
=
GetLastError
()
;
(
"
OrderSelect(
"
,
z
,
"
, SELECT_BY_POS ) - Error #
"
,
_GetLastError
)
;
continue
;
}
//---- 如果开仓不是当前货币对,略过
if
(
OrderSymbol
()
!=
Symbol
()
)
continue
;
//---- 如果开仓为BUY,
if
(
OrderType
()
==
OP_BUY
)
{
//---- 如果 MACD指标看到的零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Bid
,
5
,
Green
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出: 开仓尚早
else
return
(
0
)
;
}
//---- 如果开仓位SELL,
if
(
OrderType
()
==
OP_SELL
)
{
//----如果MACD指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Ask
,
5
,
Red
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"
错误 OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出
:开仓尚早
else
return
(
0
)
;
}
}
//+------------------------------------------------------------------+
//| 如果达到此点,没有仓位开仓
|
//| 检测是否仍有开仓的可能
|
//+------------------------------------------------------------------+
//---- 如果MACD 指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 开BUY仓
if
(
OrderSend
(
Symbol
()
,
OP_BUY
,
0.1
,
Ask
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
0
,
0
,
Green
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
//----如果MACD 指标看到零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 开 SELL 仓
if
(
OrderSend
(
Symbol
()
,
OP_SELL
,
0.1
,
Bid
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
0
,
0
,
Red
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
return
(
0
)
;
}
[backcolor=rgb(251, 251, 252)] 这样我们得到以下图表,看看它怎样运行:[/backcolor]
[backcolor=rgb(251, 251, 252)] [/backcolor]
[backcolor=rgb(251, 251, 252)] [/backcolor]
[backcolor=rgb(251, 251, 252)]都不错,但是这里有个问题存在。如果在智能交易执行期间开仓,智能交易将会默认为这个仓位为自己的仓位。这是我们不想看到的。[/backcolor]
[backcolor=rgb(251, 251, 252)]我们将按照以下方法让它管理自己的仓位:[/backcolor]
[list] [*]以Expert_ID 命名添加外部变量协助智能交易开仓来改变 MagicNumber 值 [*]在函数OrderSelect()选择仓位之后,对编译Expert_ID变量所选定单的MagicNumber 添加检测 [*]在开仓期间,我们将在MagicNumber处写下 Expert_ID的值替换 0 [/list][backcolor=rgb(251, 251, 252)]考虑上面的变化,代码将显现如下: [/backcolor]
extern
int
Expert_ID
=
1234
;
int
start
()
{
//----
记住将要分析的指标值
//---- 注意:我们使用第一个和第二个柱。可以是每日的 1-bar 。
//---- (即., 信号晚些显现), 但是保护反复开仓和平仓
//---- 在柱内仓位的
double
MACD_1
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
1
)
;
double
MACD_2
=
iMACD
(
Symbol
()
,
0
,
12
,
26
,
9
,
PRICE_CLOSE
,
MODE_MAIN
,
2
)
;
int
_GetLastError
=
0
,
_OrdersTotal
=
OrdersTotal
()
;
//---- 在全部开仓中搜索
for
(
int
z
=
_OrdersTotal
-
1
;
z
>=
0
;
z
--
)
{
//---- 如果在搜索仓位中生成错误。转到下一步
if
(
!
OrderSelect
(
z
,
SELECT_BY_POS
)
)
{
_GetLastError
=
GetLastError
()
;
(
"
OrderSelect(
"
,
z
,
"
, SELECT_BY_POS ) -错误 #
"
,
_GetLastError
)
;
continue
;
}
//---- 如果平仓仓位不是当前货币对,略过
if
(
OrderSymbol
()
!=
Symbol
()
)
continue
;
//---- 如果MagicNumber 不等于Expert_ID, 忽略此仓位
if
(
OrderMagicNumber
()
!=
Expert_ID
)
continue
;
//---- 如果开BUY仓,
if
(
OrderType
()
==
OP_BUY
)
{
//---- 如果MACD 指标看到零线从上到下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Bid
,
5
,
Green
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"
错误 OrderClose #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变, 退出: 开仓尚早
else
{
return
(
0
)
;
}
}
//---- 如果开SELL仓,
if
(
OrderType
()
==
OP_SELL
)
{
//---- 如果MACD指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 平仓
if
(
!
OrderClose
(
OrderTicket
()
,
OrderLots
()
,
Ask
,
5
,
Red
)
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderClose №
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
}
//---- 如果警报没有改变,退出: 开仓尚早
else
return
(
0
)
;
}
}
//+------------------------------------------------------------------+
//| 如果执行达到此点,没有仓位开仓
|
//| 检测是否有可能开仓
|
//+------------------------------------------------------------------+
//---- 如果MACD 指标看到零线从下到上,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
>
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
<=
0.0
)
{
//---- 开BUY仓
if
(
OrderSend
(
Symbol
()
,
OP_BUY
,
0.1
,
Ask
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
Expert_ID
,
0
,
Green
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
//---- 如果MACD 指标看到零线从上至下,
if
(
NormalizeDouble
(
MACD_1
,
Digits
+
1
)
<
0.0
&&
NormalizeDouble
(
MACD_2
,
Digits
+
1
)
>=
0.0
)
{
//---- 开SELL仓
if
(
OrderSend
(
Symbol
()
,
OP_SELL
,
0.1
,
Bid
,
5
,
0.0
,
0.0
,
"
MACD_test
"
,
Expert_ID
,
0
,
Red
)
<
0
)
{
_GetLastError
=
GetLastError
()
;
Alert
(
"错误
OrderSend #
"
,
_GetLastError
)
;
return
(
-
1
)
;
}
return
(
0
)
;
}
return
(
0
)
;
}
[backcolor=rgb(251, 251, 252)] 现在,当智能交易运行时,用户可以手动开仓。智能交易将不会干涉。[/backcolor]
macd_test1.jpgmacd_test1.jpg
遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
● 如何使用WinMTR查询平台连接流畅度
发表于:2016-08-04 01:31只看该作者
2楼
试试看看
韬客社区www.talkfx.co