新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 62 1...555657585960616263646566676869...1953 新评论 Sergey Dymov 2017.01.08 21:04 #611 伙计们,什么是最好的方法:我想看看亏损和盈利的交易中的罢工分布...我不擅长数组。失败后的卖出Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;/* Buf1[p]=Buf1[p]+1; p=0。Alert("Profitable", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", Buf1[5], ", ", Buf1[6], ", Buf1[7], ", Buf1[8], ", Buf1[9], ", Buf1[10]) ; */赢利后的销售Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;/* Buf2[k]=Buf2[k]+1; k=0。警报("损失", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], "。", Buf2[6], ", ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", Buf2[12], ", ", Buf2[13], ", Buf2[14], ", Buf2[15)) ; */这里有什么问题吗?如果不写到/*,一切都能正常工作...... Any questions from newcomers Question - Open Order [存档!]纯数学、物理学、化学等:与贸易没有任何关系的大脑训练问题 Artyom Trishkin 2017.01.08 21:08 #612 Сергей:伙计们,什么是最好的方法:我想看看亏损和盈利的交易中的罢工分布...我不擅长数组。失败后的卖出Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;/* Buf1[p]=Buf1[p]+1; p=0。Alert ("Profitable", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", Buf1[5], ", ", Buf1[6], ", Buf1[7], ", Buf1[8], ", Buf1[9], ", Buf1[10]) ; */赢利后的销售Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;/* Buf2[k]=Buf2[k]+1; k=0。警报("损失", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], "。", Buf2[6], ", ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", Buf2[12], ", ", Buf2[13], ", Buf2[14], ", Buf2[15)) ; */这里有什么问题吗?如果不写到/*,一切都能正常工作...... 嗯,哦...哪些人是 "股民","他们的分布 "是什么? Sergey Dymov 2017.01.08 21:54 #613 一系列亏损和盈利的交易。分布 - 例如我们有360个亏损交易(这可以在报告中看到),110个系列的1个亏损交易,80个系列的2个亏损交易和30个系列的3个亏损交易。我是这样做的。在确定失败的交易后k=k+1。在确定了一个有利可图的交易后如果k==1 {k1=k1+1;}。如果k==2 {k2=k2+1;}。如果k==3 {k3=k3+1;}。k=0;但对于15个或更多的损失系列来说,这种记法太大,而且不方便。 Artyom Trishkin 2017.01.08 22:10 #614 Сергей:一系列的亏损和盈利的交易。分布 - 例如我们有360个亏损交易(这可以在报告中看到),110个系列的1个亏损交易,80个系列的2个亏损交易和30个系列的3个亏损交易。我是这样做的。在确定失败的交易后k=k+1。在确定了一个有利可图的交易后如果k==1 {k1=k1+1;}。如果k==2 {k2=k2+1;}。如果k==3 {k3=k3+1;}。k=0;但对于15个或更多的损失系列来说,这种记法太大,而且不方便。我不太清楚你的任务。你是需要确定最后盈利/亏损头寸的系列,还是需要从整个交易历史中收集所有这些系列? Sergey Dymov 2017.01.08 22:19 #615 纵观历史。在测试结束时收集并输出数据。但我的做法很简单:在一系列亏损后的第一次盈利后,我输出一个逗号分隔的数字......但我想简化代码并使用数组,这可能吗? 最好的方法是什么? Sergey Gritsay 2017.01.08 23:17 #616 Ibragim Dzhanaev:这样做了,现在它不会在每个刻度 上打开,而是将信号传递给输入...double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell; int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { TotalBiu++; //Кол. покупок } if(OrderType()==OP_SELL) { TotalSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);//+------------------------------------------------------------------+ double StopLossLevel; double TakeProfitLevel; if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0; if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0; tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(TotalBiu==0) if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); } if(TotalSell==0) if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); } }//+------------------------------------------------------------------+调整了一下,应该可以了。double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell; int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);//+------------------------------------------------------------------+ double StopLossLevel; double TakeProfitLevel; if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0; if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0; tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+... Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader PROBLEM Vitaly Muzichenko 2017.01.09 03:40 #617 Sergey Gritsay:修正了,应该可以了。//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);//+------------------------------------------------------------------+有点儿需要将突出的部分归零double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy; int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { OrderBuy=0; OrderSell=0;//- for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);//+------------------------------------------------------------------+ tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+ Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader PROBLEM [删除] 2017.01.09 08:31 #618 Vitaly Muzichenko:某种程度上来说,需要将突出的部分清零double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy; int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { OrderBuy=0; OrderSell=0;//- for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);//+------------------------------------------------------------------+ tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+谢谢。现在打开的一些订单没有信号,有些则不正确。 [删除] 2017.01.09 08:36 #619 Sergey Gritsay:修正了,应该可以了。 ... 你写的东西并没有帮助... Vitaly Muzichenko 2017.01.09 09:02 #620 Ibragim Dzhanaev:谢谢你。现在打开的一些订单没有信号,有些则不正确。你在一个现有的柱子上检查,双rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0)。价格上升,出现70级的交叉,进入交易。在关闭条形图的事实中,你已经看到RSI降低了,但在此之前它是较高的,然后又回到了水平线以下。在闭合的条形图上进行检查,那么这种情况就不会发生,而进场将是在确认的信号上。double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2); 1...555657585960616263646566676869...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
伙计们,什么是最好的方法:我想看看亏损和盈利的交易中的罢工分布...我不擅长数组。
失败后的卖出
Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;
/* Buf1[p]=Buf1[p]+1; p=0。
Alert("Profitable", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", Buf1[5], ", ", Buf1[6], ", Buf1[7], ", Buf1[8], ", Buf1[9], ", Buf1[10]) ; */
赢利后的销售
Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;
/* Buf2[k]=Buf2[k]+1; k=0。
警报("损失", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], "。", Buf2[6], ", ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", Buf2[12], ", ", Buf2[13], ", Buf2[14], ", Buf2[15)) ; */
这里有什么问题吗?如果不写到/*,一切都能正常工作......
伙计们,什么是最好的方法:我想看看亏损和盈利的交易中的罢工分布...我不擅长数组。
失败后的卖出
Price_LastSell=5; Vol=Vol*Y; Izm=2; Opn_B=true; k=k+1;
/* Buf1[p]=Buf1[p]+1; p=0。
Alert ("Profitable", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", Buf1[5], ", ", Buf1[6], ", Buf1[7], ", Buf1[8], ", Buf1[9], ", Buf1[10]) ; */
赢利后的销售
Price_LastSell=5; Vol=VolumeOpen; Izm=2; Opn_S=true; p=p+1;
/* Buf2[k]=Buf2[k]+1; k=0。
警报("损失", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], "。", Buf2[6], ", ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11], ", Buf2[12], ", ", Buf2[13], ", Buf2[14], ", Buf2[15)) ; */
这里有什么问题吗?如果不写到/*,一切都能正常工作......
一系列亏损和盈利的交易。分布 - 例如我们有360个亏损交易(这可以在报告中看到),110个系列的1个亏损交易,80个系列的2个亏损交易和30个系列的3个亏损交易。
我是这样做的。
在确定失败的交易后
k=k+1。
在确定了一个有利可图的交易后
如果k==1 {k1=k1+1;}。
如果k==2 {k2=k2+1;}。
如果k==3 {k3=k3+1;}。
k=0;
但对于15个或更多的损失系列来说,这种记法太大,而且不方便。
一系列的亏损和盈利的交易。分布 - 例如我们有360个亏损交易(这可以在报告中看到),110个系列的1个亏损交易,80个系列的2个亏损交易和30个系列的3个亏损交易。
我是这样做的。
在确定失败的交易后
k=k+1。
在确定了一个有利可图的交易后
如果k==1 {k1=k1+1;}。
如果k==2 {k2=k2+1;}。
如果k==3 {k3=k3+1;}。
k=0;
但对于15个或更多的损失系列来说,这种记法太大,而且不方便。
我不太清楚你的任务。
你是需要确定最后盈利/亏损头寸的系列,还是需要从整个交易历史中收集所有这些系列?
这样做了,现在它不会在每个刻度 上打开,而是将信号传递给输入...
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
TotalBiu++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
TotalSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(TotalBiu==0)
if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
}
if(TotalSell==0)
if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
}
}
//+------------------------------------------------------------------+
调整了一下,应该可以了。
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
...
修正了,应该可以了。
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
有点儿需要将突出的部分归零
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
//-
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
某种程度上来说,需要将突出的部分清零
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
//-
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
谢谢。现在打开的一些订单没有信号,有些则不正确。
修正了,应该可以了。
...
谢谢你。现在打开的一些订单没有信号,有些则不正确。
你在一个现有的柱子上检查,双rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0)。
价格上升,出现70级的交叉,进入交易。在关闭条形图的事实中,你已经看到RSI降低了,但在此之前它是较高的,然后又回到了水平线以下。
在闭合的条形图上进行检查,那么这种情况就不会发生,而进场将是在确认的信号上。
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);