解释
该 MQL4
脚本用于在 MetaTrader 平台上创建一个简单的商品交易自动化机制(ATM机),并通过交易信号触发警报。脚本主要基于商品指数平滑移动平均线 (CCI) 来确定买卖时机。以下是其逻辑的详细描述:
1. 属性声明
#property copyright "Copyright © 2009"
: 指定版权信息。#property link "http://www.extremeideologies.blogspot.com"
: 提供链接到脚本作者或站点的信息。#property indicator_chart_window
: 标记此指标应在图表窗口中显示。
2. 外部变量声明
- `extern int CCI_Trend = 140;`:定义趋势CCI的周期长度,默认为140。
- `extern int CCI_Entry = 100;`:定义入场CCI的周期长度,默认为100。
- `extern int CCI_Power = 42;`:定义过滤CCI的周期长度,默认为42。
3. 初始化函数 (init()
)
- 此函数在指标加载时调用。当前实现中未执行任何操作,直接返回0。
4. 去初始化函数 (deinit()
)
- 在指标卸载时调用。当前实现中也未执行任何操作,直接返回0。
5. 迭代函数 (start()
)
这是脚本的主要逻辑部分,在每个图表条形更新时被调用。
-
int counted_bars=IndicatorCounted();
: 获取当前计数的指标条形数量。这用于确保所有历史数据都已加载。 -
double cciTrendNow, cciTrendPrevious, cciEntryNow, cciEntryPrevious, cciFilterNow , cciFilterPrevious ;
:声明变量来存储CCI值及其前一个周期的值。 -
获取当前和前一个周期的CCI值:
- `cciTrendNow = iCCI(NULL,0,CCI_Trend, PRICE_MEDIAN,0);`: 获取趋势CCI的值。 - `cciTrendPrevious = iCCI(NULL,0, CCI_Trend, PRICE_MEDIAN,1);`: 获取趋势CCI前一个周期的值。 - `cciEntryNow = iCCI(NULL,0,CCI_Entry, PRICE_MEDIAN,0);`: 获取入场CCI的值。 - `cciFilterNow = iCCI(NULL,0,CCI_Power,PRICE_MEDIAN,0);`: 获取过滤CCI的值。 - `cciFilterPrevious = iCCI(NULL,0,CCI_Power,PRICE_MEDIAN,1);`: 获取过滤CCI前一个周期的值。 - `cciEntryPrevious = iCCI(NULL,0,CCI_Entry,PRICE_MEDIAN,1);`: 获取入场CCI前一个周期的值。
-
根据CCI条件触发交易信号并发送警报:
- `if ((cciEntryNow < 0) && (cciEntryPrevious >= 0 ))`: 如果当前入场CCI小于零,而前一周期大于等于零,则可能发出卖出信号。进一步检查趋势和过滤CCI以确认。 ```markdown - `if(((cciTrendNow < 0) && (cciTrendPrevious >= 0)) && ((cciFilterNow < 0) && (cciFilterPrevious >= 0)))`: 检查趋势CCI和过滤CCI的条件,确保它们也符合卖出条件。 ```markdown - `Alert(Symbol(), " M", Period(), " ....SELL....");`:发送警报指示卖信号。
else if((cciEntryNow > 0) && (cciEntryPrevious <= 0))
: 如果当前入场CCI大于零,而前一周期小于等于零,则可能发出买入信号。进一步检查趋势和过滤CCI以确认。- `if(((cciTrendNow > 0) && (cciTrendPrevious <= 0)) && ((cciFilterNow > 0) && (cciFilterPrevious >=0)))`: 检查趋势CCI和过滤CCI的条件,确保它们也符合买入条件。 ```markdown - `Alert(Symbol(), " M", Period(), " ....BUY....");`:发送警报指示买信号。
-
记录日志信息:
- `Comment("Trend CCI: ", cciTrendNow, " Entry CCI: ", cciEntryNow , "Power CCI:", cciFilterNow);`: 输出CCI值到图表的注释栏,帮助调试和查看数据。
-
返回0表示迭代完成。
这个脚本通过比较当前周期与前一周期的CCI值来决定是否发出交易信号,并使用警报功能在图表上提示用户进行相应的操作。
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
ATM Machine Modified
//+------------------------------------------------------------------+
//| ATM Machine with Alert.mq4 |
//| Copyright © 2009 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009"
#property link "http://www.extremeideologies.blogspot.com"
#property indicator_chart_window
extern int CCI_Trend = 140;
extern int CCI_Entry = 100;
extern int CCI_Power = 42;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
double cciTrendNow, cciTrendPrevious, cciEntryNow, cciEntryPrevious, cciFilterNow , cciFilterPrevious ;
cciTrendNow = iCCI(NULL,0,CCI_Trend, PRICE_MEDIAN,0);
cciTrendPrevious = iCCI(NULL,0, CCI_Trend, PRICE_MEDIAN,1);
cciEntryNow = iCCI(NULL,0,CCI_Entry, PRICE_MEDIAN,0);
cciFilterNow = iCCI(NULL,0,CCI_Power,PRICE_MEDIAN,0);
cciFilterPrevious = iCCI(NULL,0,CCI_Power,PRICE_MEDIAN,1);
cciEntryPrevious = iCCI(NULL,0,CCI_Entry,PRICE_MEDIAN,1);
//----
//Print(cciTrendNow, "...", cciTrendPrevious, "...", cciEntryNow, "...", cciFilterNow, "...", cciFilterPrevious, "...", cciEntryPrevious);
if ((cciEntryNow < 0) && (cciEntryPrevious >= 0 )){
if(((cciTrendNow < 0) && (cciTrendPrevious >= 0)) && ((cciFilterNow < 0) && (cciFilterPrevious >= 0))){
Alert(Symbol(), " M", Period(), " ....SELL....");
}
}
else if((cciEntryNow > 0) && (cciEntryPrevious <= 0)) {
if(((cciTrendNow > 0) && (cciTrendPrevious <= 0)) && ((cciFilterNow > 0) && (cciFilterPrevious >=0))){
Alert(Symbol(), " M", Period(), " ....BUY....");
}
}
Comment("Trend CCI: ", cciTrendNow, " Entry CCI: ", cciEntryNow , "Power CCI:", cciFilterNow);
//----
return(0);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---