你好。
经过长时间的观察和研究,研究了这个(了不起的)论坛的一些工具或一些策略,在我看来,指标CCI经常被用来作为一个可靠的过滤器。
参考标记。 +100/-100和0都很重要。 但在走得太远之前,让我们从参考标记0开始。
一旦这个参考标记0被打破,价格就会强制性地朝同一方向发展。
那么是否有可能用这些简单的数值制作一个EA(用于MT3或MT4)?
指标。
CCI(10或14)(可以改变周期)。
FT。M30 或 H1
SL: 20 (外部)
TP: 200 (外部)
TP: 6 (外部)
规则 :开盘:从参考标记0开始的交叉点
关闭:与SL,或TP,或TS或新的交叉点进行的参考标志0。
让我们简单地开始,根据第一个结果,我们将把过滤器。
这种方法并不希望在风险中获得最大的点数,而是确保自己每次都有可靠和有利的小交易。
感谢大家对这个请求的关注, 。布鲁诺。
你的意思是说,如果CCI上升,越过0,就是买入的信号。对吗?
如果CCI处于下降趋势并越过0,则是卖出。
是这样吗?
如果是的话,那么我似乎可以做到这一点。
你好,Newdigital。
You mean that if CCI is going up crossing the 0 so it is signal to buy. Right?
如果CCI处于下降趋势,并且越过零点,那么就是卖出。
是这样吗?
如果是的话,那么我似乎能够做到这一点。是的,就是这样,你想要一个确认的图像吗?
我感谢你的工作和你的兴趣。 你认为这个策略怎么样?
我们也可以在CCI(14)图表上绘制MA(25),并采取同样的信号,但要更早,或者只是等待CCI将跨越0水平并确认方向。
我认为,使用日线图更好,它不像上半年那么嘈杂。
我创建了这个EA。
我想把它附在帖子里。
但我认为它应该是一些过滤器或一些其他指标。
我认为t/s=6不是一个好主意。
无论如何,我做了它。
它应该是准确的,根据你的规则。
如果我们想,我们可以添加任何其他指标。
我们也可以在CCI(14)图表上绘制MA(25),并采取同样的信号,但要更早,或者只是等待CCI将跨越0水平并确认方向。 IMHO,最好使用日线图,它不像1H那么吵。
你好,克拉尔。
谢谢你的兴趣和想法。
我想过这种可能性,但我已经写得很高了,从一个简单的EA开始,没有过滤器,以验证第一个结果。
BrunoFX。
我现在不能附上它,所以我把代码贴出来。
我希望没有任何错误。
//| CCI_ea.mq4 |
//| code by Newdigital |
//| https://www.forex-tsd.com |
//| using Gordago software |
//| http://www.gordago.com |
//| |
//| 21.02.2006 CCI_ea by idea of BrunoFX |
//| (see the thread |
//| https://www.forex-tsd.com/suggestions-trading-systems/1089-cci_ea.html |
//| |
//+--------------------------------------------------------------------------+
#property copyright "BrunoFX and newdigital"
#property link "https://www.forex-tsd.com"
extern int MAGIC = 976714;
extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 20;
extern double sStopLoss = 20;
extern double lTakeProfit = 200;
extern double sTakeProfit = 200;
extern double lTrailingStop = 6;
extern double sTrailingStop = 6;
extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "CCI_ea";
extern string PARAMETERS_ALARM = "PARAMETERS ALARM";
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern string PARAMETERS_HOURS = "TRADING HOURS";
extern bool UseHourTrade = True;
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;
extern string PARAMETERS_INDICATOR_ONE = "CCI";
extern int CCIPeriod=14;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
double diCCI0=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI1=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI2=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d3=(0);
double diCCI4=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI5=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI6=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d7=(0);
double diCCI8=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI9=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI10=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d11=(0);
double diCCI12=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI13=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI14=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d15=(0);
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((diCCI0=d3)){
OpenBuy();
return(0);
}
if ((diCCI4>diCCI5 && diCCI6<=d7)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((diCCI8>diCCI9 && diCCI10<=d11)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((diCCI12=d15)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }还有一些关于关闭订单的改进。
我们现在可以选择关闭订单的CCI时期。
//+--------------------------------------------------------------------------+
//| CCI_ea.mq4 |
//| code by Newdigital |
//| https://www.forex-tsd.com |
//| using Gordago software |
//| http://www.gordago.com |
//| |
//| 21.02.2006 CCI_ea by idea of BrunoFX |
//| (see the thread |
//| https://www.forex-tsd.com/suggestions-trading-systems/1089-cci_ea.html |
//| |
//+--------------------------------------------------------------------------+
#property copyright "BrunoFX and newdigital"
#property link "https://www.forex-tsd.com"
extern int MAGIC = 976714;
extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 20;
extern double sStopLoss = 20;
extern double lTakeProfit = 200;
extern double sTakeProfit = 200;
extern double lTrailingStop = 6;
extern double sTrailingStop = 6;
extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "CCI_ea";
extern string PARAMETERS_ALARM = "PARAMETERS ALARM";
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern string PARAMETERS_HOURS = "TRADING HOURS";
extern bool UseHourTrade = True;
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;
extern string PARAMETERS_INDICATOR_ONE = "CCI";
extern int CCIPeriod_signal=14;//taking the signal to open buy or sell
extern int CCIPeriod_close_buy=14;
extern int CCIPeriod_close_sell=14;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
double diCCI0=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,1);
double diCCI1=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double diCCI2=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double d3=(0);
double diCCI4=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,1);
double diCCI5=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double diCCI6=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double d7=(0);
double diCCI8=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,1);
double diCCI9=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,0);
double diCCI10=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,0);
double d11=(0);
double diCCI12=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,1);
double diCCI13=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,0);
double diCCI14=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,0);
double d15=(0);
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((diCCI0=d3)){
OpenBuy();
return(0);
}
if ((diCCI4>diCCI5 && diCCI6<=d7)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((diCCI8>diCCI9 && diCCI10<=d11)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((diCCI12=d15)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }嗨,Newdigital。
欢呼吧。 哪种效果和哪种速度。
我看到在脚本中,你把警报和一个过滤器的时间服务。
事实上,这都是必要的。
我将从明天早上开始测试它。
你是最棒的
我认为,只有当CCI越过0水平时,交易才会开启。请看一下图表。为什么我们有这么多的交易?
你好。
经过长时间的观察和研究,研究了这个(了不起的)论坛的一些工具或一些策略后,我觉得指标CCI经常被用来作为一个可靠的过滤器。
参考标记。+100/-100和0都很重要。但在走得太远之前,让我们从参考标记0开始。
一旦这个参考标记0被打破,价格就会强制性地朝同一方向发展。
那么是否有可能用这些简单的数值制作一个EA(用于MT3或MT4)?
指标。
CCI(10或14)(可以改变周期)。
FT。M30 或 H1
SL: 20 (外部)
TP: 200 (外部)
TP: 6 (外部)
规则 :开盘:从参考标记0开始的交叉点
关闭:与SL,或TP,或TS或新的交叉点进行的参考标志0。
让我们简单地开始,根据第一个结果,我们将把过滤器。
这种方法并不希望在风险中获得最大的点数,而是要确保每次都有可靠和有利的小规模交易。
感谢你对这一请求的关注。