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

 

同志们!这是我的第2次尝试,创造一个神奇的工具,读取ROC AUDUSD和GBPUSD,在GBPAUD上交易!)这有点原始,但我真的想试试!!!。当我在没有优化的情况下在测试器中运行它时,它冻结了,但一直在成功加载......而最终--没有一笔交易。好吧,显然我搞砸了,但在哪里,请告诉我,知识渊博的人!!!:))这是一个EA代码。 BETWEEN数据来自一个正常的自定义ROC

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted()在EA中不起作用。它只用于指标。也许我们应该把问题扩大一点。有不同的方法来解决这个问题。最简单的是优化指标(但并不总是可能的),你可以将计算结果转移到专家顾问,但也不总是可能的。实际上,你必须看一下指标

我想把计算代码转移到EA中,在一个指标中,计算代码以一个循环开始......我怎样才能用一个更正确的代码来代替它呢7

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

同志们!这是我的第2次尝试,创造一个神奇的工具,读取ROC AUDUSD和GBPUSD,在GBPAUD上交易!)这有点原始,但我真的想试试!!!。当我在没有优化的情况下在测试器中运行它时,它冻结了,但一直在成功加载......而最终--没有一笔交易。好吧,显然我搞砸了,但在哪里,请告诉我,知识渊博的人!!!:))这是所谓的专家顾问的代码,它从通常的自定义ROC中获取数据。


尝试使用原始的历史加载 控制

附加的文件:
 
Vinin:


尝试用原始的控制方式加载历史

也许仅仅比较x1和x2是不正确的,而应该附加在一些东西上,比如说,最后一棒? 根据指标逻辑,EA应该至少打开一个头寸,而不是关闭它,因为关闭在程序中没有实现:)),而且一种货币的ROC总是大于另一种货币的ROC...

 

也许指标调用 不太正确。我得自己去找找看。只是看起来,缓冲区应该是零,而不是第一。

 

我没有这样的指标

 
T-G:

我想把计算代码转移到专家顾问,计算代码以一个循环开始......我怎样才能用一个更正确的代码来代替它呢7

1.为什么?????????????????????

但是,如果你真的需要,那么

2.为什么我他妈的什么都不回答?告诉你--在文章中,有一篇科西岑关于这个问题的文章(就在这里,上面有链接)。我必须向你重复多少次?也许你有别的事情要做?

 
Vinin:

我没有这样的指标

以下是ROC指标的代码

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"难道没有人需要拖地吗?我会来洗它们的!" (с)

这里是指标代码向专家代码的转移

 
obla4ko:

以下是ROC指标的代码


指标代码中存在一个错误。