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

 
volshebnik:
为什么测试仪的速度在第三年年底会下降?


有这样一个问题--我也有这样的问题,如果专家顾问每年做很多交易--可能为了显示最终结果而存储了很多数据,或者指标缓冲区 会吃掉内存。

作为一个整体的锯子--我不知道,请容忍我--为了大局,测试10年,最好是一次优化一年,然后进行最佳参数的选择。

 

我想分析不同的交叉盘,然后在另一个货币对上下单。

int magic = 428;//专家顾问的魔法号码。
外部双倍体积 = 0.1;//正在下的订单的体积。
外来的int slippage = 3;//slippage
int OPB;//买入订单的标记
int OPS;//卖出订单的标记
int Profit=1;//开仓单利润水平
string comB = "买入时进入趋势;//对订单的评论
string comS = "按趋势进入卖出";//订单注释
double StochasticCAD;//USDCAD当前条形图上的主要随机线的位置
double StochasticAUD;//澳元兑美元的随机指数线在当前柱子上的位置。

double SARCAD;//当前指标在USDCAD上的位置
双重SARCAD;//指标条的位置回到USDCAD上
双重SARAUD;//指标在AUDUSD上的当前位置
双重SARСAUD;//在澳元兑美元上的指标条回的位置


int start()
{

//______________________________определение значений переменных_______________________


StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0)。
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0)。

SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);

double bidCAD =MarketInfo("USDCAD",MODE_BID);
double askCAD =MarketInfo("USDCAD",MODE_ASK);
double bidAUD =MarketInfo("AUDUSD",MODE_BID)。
double askAUD =MarketInfo("AUDUSD",MODE_ASK);




//______________________________поиск и закрытие ордеров_______________________________________


int i;
for(i=0; i<=OrdersTotal(); i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;//如果订单号i不存在,停止搜索。

如果(OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic)//如果订单不是来自我们EA所在的货币对
continue; // 跳过这个订单,看它后面的下一个订单。


//_______close 购买_______
如果(OrderType() == OP_BUY && OrderProfit()>=Profit)
// 如果订单是买入
{
OPB=1。
如果(StochasticCAD==0 ||StochasticAUD==100 ||SARCAD<bidCAD ||SARAUD>askAUD)//和市场即将逆转。
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // 如果处于盈利状态就关闭它。
OPB=0。
}
}
否则
{
//_______close Sell_______
如果(OrderType() == OP_SELL && OrderProfit()>=Profit)//如果订单为卖出
{OPS=1;
如果(StochasticCAD==100|StochasticAUD==0|SARCAD>askCAD|SARAUD<bidAUD)//和市场接近反转。
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); //如果处于盈利状态就关闭它。
OPS=0。
}
}
}
}

//______________выставление ордеров______________________________________________________________________


如果(SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARCAUD>askAUD && OPB<1)//定义条件

{ //_______Buy_______

if(!IsTradeAllowed())
{
Alert("trade thread is busy, try again buy...")。
返回(-1)。
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slipage,0,0,comB,magic,0,Red); //设置一个订单

如果(OPB == -1)
{
Alert("GBPUSD", "Error: buy", GetLastError())。
返回(-1)。
}

如果(OPB > 1)
Alert("GBPUSD", "我们有一个买入订单!" )

}
否则
{//_______Sell_______

if(SARCAD>askCAD && SARCAD<bidCAD && SARCADAUD<bidAUD && SARAUD>askAUD && OPS<1)//定义条件

{

if(!IsTradeAllowed())
{
Alert("交易线程繁忙,再试一次卖出...")。
返回(-1)。
}

OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slipage,0,0,comS,magic,0,Blue); //设置一个订单


如果(OPS == -1)
{
Alert("GBPUSD", "Error: Sell", GetLastError())。
返回(-1)。
}

如果(OPS > 1)
Alert("GBPUSD", "Put Sell order!" )

}
}
return(0);//exit
}


当我测试时,没有任何东西出来。没有结果。

在日志中,有一组错误。

你能告诉我什么是错的吗?

 
ViktorF:

我想分析不同的交叉盘,然后在另一对上下单。

int magic = 428;//EA的magic number
extern double volume = 0.1;//下单量
extern int slippage = 3;//slippage
int OPB;//下的买单标签
int OPS;//下的卖单标签
int Profit=1;//开单的利润水平
string comB = "Entry by trend to Buy"; //request for order
string comS = "Entry by trend to Sell"; //request for order
double StochasticCAD。//
double StochasticAUD;//澳元当前条形上的随机主线的位置

double SARCAD;//指标在USDCA上的当前位置
double SARCAD;//指标条形在USDCA上的位置
double SARAUD;//指标在AUDUSD上的当前位置
double SARAUD;//指标在AUDUSD上的位置


int start()
{



//______________________________ 确定变量值_______________________ StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0); StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,0); SARCAD=iSAR("USDCAD",30,002,0.2,0); SARCAD=iSAR("USDCAD",30,0.02,0.2,1); SARAUD=iSAR("AUDUSD",30,0.02,0.2,0); SARSAUD=iSAR("AUDUSD",30,0。02,0.2,1); double bidCAD =MarketInfo("USDCAD",MODE_BID); double askCAD =MarketInfo("USDCAD",MODE_ASK); double bidAUD =MarketInfo("AUDUSD",MODE_BID); double askAUD =MarketInfo("AUDUSD",MODE_ASK); //______________________________ 搜索和关闭订单_______________________________________ int i; for(i=0; i<=OrdersTotal(); i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;//如果订单号码i不存在,停止搜索 if (OrderSymbol() !="GBPUSD" || OrderMagicNumber() != magic) // 如果订单不是来自我们的专家顾问所在的货币对 continue; // 跳过它,看看它后面的订单 //_______close Buy_______ if (OrderType() == OP_BUY && OrderProfit()>.=利润) //如果订单是买入 { OPB=1; if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//且市场接近反转 { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); //如果是买入就关闭 OPB=0; }} else { //_______close Sell_______ if(OrderType() == OP_SELL && OrderProfit()>=Profit)//如果订单是Sell {OPS=1; if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>.askCAD || SARAUD<bidAUD)//并且市场接近反转 { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); //如果盈利就关闭它 OPS=0; }} } } //______________ 下单 ______________________________________________________________________ if (SARCAD>askCAD && SARCAD<bidCAD && SARAUD<bidAUD && SARAUD>askAUD && OPB<1)//定义条件 { //_______Buy if(!IsTradeAllowed()){ Alert("the trade thread is busy, try again buy..."); return(-1); }OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slipage,0,0,comB,magic,0,Red); //set order if(OPB == -1) { Alert("GBPUSD"," error: buy", GetLastError(); return(-1); }if(OPB > 1) Alert ("GBPUSD", "Put Buy Order!"); }else {//_______Sell_______ if(SARCAD>askCAD && SARCAD<bidCAD && SARCAD<bidAUD && SARAUD>askAUD && OPS<1)/define conditions { if(!IsTradeAllowed()){ Alert("the trade thread is busy, try again to sell..."); return(-1); }OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slipage,0,0,comS,magic,0,Blue); //set order if(OPS == -1) { Alert("GBPUSD", "error: sell", GetLastError(); return(-1); }if(OPS > 1) Alert ("GBPUSD", "Put Sell order!"); }} return(0);//退出 }















































































































测试时没有任何东西出来。它没有产生任何结果。

日志中出现了一组错误。

你能告诉我什么是错的吗?


首先,学习如何通过同时按 "Counterclick + Alt + M "在窗口中插入代码,这样在你的halimatry中人们就可以导航并给出建议。

也可以尝试双击日志中相应的错误信息--也许它将导致一些思考......

 
Roman.:


首先,学习如何通过同时按 "Conrle + Alt + M "键在窗口中插入代码,这样你就可以引导人们了解你的废话并提出建议。

此外,尝试双击日志中相应的错误信息--也许那会给你一些想法......


错误是在测试人员的日志中,而不是在编译器的日志中...(其实你可以在图片中看到,如果你先看,然后再评论...)。双击在那里没有任何作用......

 
int magic = 428;//магический номер эксперта
extern double volume = 0.1;//объем выставляемого ордера
extern int slippage = 3;//проскальзывание
int OPB;//метка выставляемого ордера на покупку
int OPS;//метка выставляемого ордера на продажу
int Profit=1;//уровень профита открытых ордеров
string comB = "Вход по тренду на Buy";//комментарий ордера
string comS = "Вход по тренду на Sell";//комментарий ордера
double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD
double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD

double SARCAD;//текущее положение индикатора по USDCAD
double SARСCAD;//положение индикатора бар назад по USDCAD
double SARAUD;//текущее положение индикатора по AUDUSD
double SARСAUD;//положение индикатора бар назад по AUDUSD

double bidCAD;
double askCAD;
double bidAUD;
double askAUD;

int start()
  {
  
//______________________________определение значений переменных_______________________ 


      StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0); 
      StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0);
      
      SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
      SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
      SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
      SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);
      
      bidCAD   =MarketInfo("USDCAD",MODE_BID);
      askCAD   =MarketInfo("USDCAD",MODE_ASK);
      bidAUD   =MarketInfo("AUDUSD",MODE_BID);
      askAUD   =MarketInfo("AUDUSD",MODE_ASK);


      

//______________________________поиск и закрытие ордеров_______________________________________   
    

    int i;
    for(i=0; i<=OrdersTotal(); i++)
    {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
     break;// если ордер номер i не существует, прекращаем перебор
  
        if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт
        continue; // пропускаем его и смотрим на следующий за ним ордер
        

      //_______закрытие Buy_______       
        if (OrderType() == OP_BUY && OrderProfit()>=Profit) 
        // если ордер бай 
        {
         OPB=1;
         if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту
          {
           OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите
           OPB=0;
          }
        }
        else  
        {
      //_______закрытие Sell_______ 
         if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл
          {OPS=1;
           if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту
            {
             OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите
             OPS=0;
            }
          }
        }
    }
        
//______________выставление ордеров______________________________________________________________________
    
  
    if (SARCAD>askCAD && SARСCAD<bidCAD && SARAUD<bidAUD && SARСAUD>askAUD && OPB<1)//определим условия
     
     {  //_______Buy_______ 

          if(!IsTradeAllowed())
               {
                  Alert("занят торговый поток, повторим попытку бай...");
                  return(-1);
               }
          OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //выставим ордер
            
            if(OPB == -1)
              {
                 Alert("GBPUSD"," ошибка: бай", GetLastError());
                 return(-1);
              }
         
            if(OPB > 1)
            Alert ("GBPUSD","Выставили ордер на покупку!");

     }
      else
     {//_______Sell_______
  
         if (SARСCAD>askCAD && SARCAD<bidCAD && SARСAUD<bidAUD && SARAUD>askAUD && OPS<1)//определим условия
     
         {
          
           if(!IsTradeAllowed())
                {
                   Alert("занят торговый поток, повторим попытку селл...");
                   return(-1);
                }
        
           OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //выставим ордер


             if(OPS == -1)
               {
                  Alert("GBPUSD"," ошибка: селл", GetLastError());
                  return(-1);
               }
         
             if(OPS > 1)
             Alert ("GBPUSD","Выставили ордер на продажу!");

         }
     }    
   return(0);//выход
  }

 
ViktorF:


对所有抽搐进行测试?历史上的问题
 
Vinin:

对所有抽搐进行测试?历史上的问题

也就是说,你需要为分析中涉及的所有货币对重新加载历史记录吗?
 
ViktorF:

也就是说,你需要为分析中涉及的所有货币对重新加载历史记录?


也许。当然,如果经纪公司支持它的话。

但我们不应忘记,你可以在测试器中为当前的符号建仓,而对其他符号有一些限制

 
Vinin:


这是有可能的。当然,如果经纪公司支持它的话。

请记住,在测试器中,你可以在当前工具中开仓,而对其他工具有一些限制


什么是DC?那么对其他文书的限制是什么?
 
ViktorF:

什么是经纪公司?那么对其他符号有什么限制呢?


DC - 交易台

在其他工具的测试器中,你只能 得到零条上的开盘价,其他工具的ticks没有被模拟,市场环境几乎是不可触及的。

其他工具的交易没有开放。

如果你需要正确进行多货币分析,最好使用MT5。有一个多币种测试器。

原因: