[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 67

 

大家好。

我决定成为一名作家。我想在MQL4 中写一些东西。我读了一些关于它的资料,决定写一个专家顾问,当RSI ,周期8越过70时开仓,当 越过30时平仓,其他的都不会发生。我写的,这里是代码

//+------------------------------------------------------------------+
//| 4doc.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#财产版权"Alex"
#属性链接 "http://www.metaquotes.net"

//---- 输入参数
外来的Int PerRSI=8;
外部intNamber=77771。

外来的双倍Lots=1.0。

/+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
䵮䵮
cnt=0。
票。
总计。

rsi_0, //值。rsi_0 电流
rsi_1; // 值。rsi_1第一条
如果(Bars<100)
{
Print("小于100的条形图")。
return(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // 当前栏位
rsi_1=iRSI(NULL,0, PerRSI,0,1); // 当前小节加1
total=OrdersTotal()。
如果(total<1)
如果(rsi_0 < rsi_1 && rsi_0 > 70) //如果线已经越过70
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("卖出订单开仓:",OrderOpenPrice())
}
else Print("错误打开卖出订单:",GetLastError())。
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
RefreshRates()。
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
if(OrderType()<=OP_SELL && //这是一个未平仓的头寸?OP_BUY或OP_SELL
OrderSymbol()==Symbol()) //工具匹配?
{
如果(OrderType()==OP_SELL)//仓位已打开
{
如果(rsi_0 > rsi_1 && rsi_0 < 30) // 如果线已经越过30
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置
return(0); // 退出

}}}}}

我已经测试了它,它的工作原理基本与我想的一样, 。我决定修改代码,当SSI - 14越过100水平时开 仓,当 越过100水平时平仓。我将RSI 代码改为CCI ,这里是。

//+------------------------------------------------------------------+
//| CCI-DOC.mq4|
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#财产版权 "Alex"
#属性链接 "http://www.metaquotes.net"

//---- 输入参数
外置 int PerCCI=14;
在外部,MagicNamber=88881。

外来的双倍Lots=1.0。

//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
䵮䵮
cnt=0。
票。
总计。

cci_0, // cci_0值。cci_0 电流
cci_1; // cci_1值。cci_1第一条
如果(Bars<100)
{
Print("小于100的条形图")。
return(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // 当前栏位
cci_1=iRSI(NULL,0, PerCCI,0,1); // 当前条形图加1
total=OrdersTotal()。
如果(total<1)
如果(cci_0 < cci_1 && cci_0 > 100) // 如果(线已越过100)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("卖出订单开仓:",OrderOpenPrice())
}
else Print("错误打开卖出订单:",GetLastError())。
return(0);
}
for(cnt=0;cnt<total;cnt++)
{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)。
if(OrderType()<=OP_SELL && //这是一个未平仓的头寸?OP_BUY或OP_SELL
OrderSymbol()==Symbol()) //工具匹配?
{
如果(OrderType()==OP_SELL)//仓位已打开
{
如果(cci_0 > cci_1 && cci_0 < -100) // 如果线已经越过 -100
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置
return(0); // 退出
}}}}}

开始测试CCI ..... 好了,什么都没有发生,没有卖出或买入,日志中没有错误,在测试结束时打开曲线图,但它不是CCI,而是RSI 70-30,周期为14.....。也许有经验的作家会理解并告诉你为什么以及如何解决这个问题。

 
pepsi писал(а)>>
然后,日志中的演示更清楚地显示了一切。在哪里寻找错误比较清楚。在我自己身上...

>> 谢谢你

 

你好!!!!!!!

我想/非侵入性地/;-))提醒你关于P的问题。64关于MA的交易条件...预先感谢您(对一个傻瓜来说,这是在裤子上踢了一脚)

 

先生们,你们能告诉我,如果我在终端中使用同一交易工具的几个不同时间的图表吗?

流量是如何被程序消耗的?它消耗的是最小时间段的流量,还是所有时间段的流量?

 
igrok2008 >> :

你好!!!!!!!

我想/非侵入性地/;-))提醒你关于P的问题。64关于MA的交易条件...预先感谢您(对傻瓜的踢腿)。

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т. е. объяснить программе
    к виду каких данных эти опены относятся( целые, дробные, строчные, логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >> :

谢谢你的答复!!。

1.让我澄清一下,有双开_0和双_1的两行需要写在双MA行之前,还是不加批判的??????。

2.在交易条件中,你可以用open_0,1代替open[0,1] ????????.....。

 
igrok2008 >> :

谢谢你的答复!!。

1.让我澄清一下,有双开_0和双_1的两行需要写在双MA行之前,还是不加批判的??????。

2.你可以用open_0,1代替open[0,1] ????????.....

1.不是关键。

2.可以

 

请帮助我...我可能很懒,但我不知道如何将程序 连接到模拟或真实账户上进行交易......。请解释一下该写什么,在哪里唱,我求你了......提前感谢!))。

 
我写了--我写了,我在测试器中进行了交易,但在演示或真实中不想进行交易,而且一般没有信号,尽管它们应该存在((())。
 
keekkenen >> :

1.不是关键

2.可以

CGFCB<J即感谢你!!!!