[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 520

 
Roger:

一般来说,我添加了两个变量--一个是要达到的存款水平,第二个是要删除的文件数量。它只起一次作用,然后有必要纠正水平为另一个值或重新启动专家顾问。
谢谢 - 现在我将进行测试。或者它不适合在测试器中运行?
 
alex12:
谢谢 - 我现在就进行测试。还是说它不适合于测试员运行?

我将如何测试它?
 
demlin:

向大家问好!

请告知判断平仓的正常指标,提前感谢 ))))


我正在亲自测试这个问题

可以通过iCustom()轻松添加(插入)到专家顾问中。

 
一个简单的系统,用于穿越2辆马车。
买入--快者越过慢者向上。
卖出--快速的一个与慢速的一个向下交叉。

关闭--相反的信号或拖网。你能告诉我应该如何修改代码,以便在每次开仓时设置止损=50点?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


我正在亲自测试这个问题

它很容易通过iCustom()添加(连接)到专家顾问。

我想知道,你如何在EA中定义它的极端低值和极端高值?毕竟,在图表的一个局部区域,0.3800(蓝线)是一个极端值,对应于一个暂时的修正,而在下一个局部区域,0.3041(绿线)成为其极端值,标志着一个反转...

在第一个多头(红线)的极端低值0.4596又如何呢,它没有说什么?

那你如何判断指标极值低值是表示修正还是反转?事实上,在第一种情况下,0.3800的值表示修正(绿色垂直线),而在第二种情况下--趋势的结束(红色垂直线)。

最后--图表上有很多这样的局部极端现象。毕竟,在3-5小时内,肯定会有最低值,而且是该时间段内的极低值。如果我们为寻找指标极值指定一定的时间间隔,它们就会被找到,但...然而,在随后的条形图上,超过指定的时间框架,可能会发生指标值会变得更低(更高),然后这个值将是极端的低(高) - 但如何处理之前发现的那个?越是这样,专家顾问就越是要根据它来做决定。

然而......。


 
artmedia70:

我想知道,你是如何在你的专家顾问中定义极端低值和极端高值的?毕竟,在图表的一个局部区域,0.3800(蓝线)是一个极端值,对应于一个暂时的修正,而在下一个局部区域,0.3041(绿线)成为其极端值,标志着一个反转...

在第一个多头(红线)的极端低值0.4596又如何呢,它没有说什么?

那你如何判断指标极低值是否表示修正或反转?事实上,在第一种情况下,0.3800的值表示修正(绿色垂直线),而在第二种情况下--趋势的结束(红色垂直线)。

最后--图表上有很多这样的局部极端现象。如果我们设定一个3-5小时的间隔,它肯定是最低值,而且将是该时间间隔的极端低值。如果我们指定某个时间间隔来寻找指标极值,它就会被找到,但...然而,在随后的条形图上,超过指定的时间框架,可能会发生指标值变得更低(更高),然后这个值将是极端的低(高) - 但如何处理之前的指标?越是这样,专家顾问就越是要根据它来做决定...

然而......。





我把这个指标看成是进入趋势或平坦策略市场 的过滤器,即对其读数出现以下解释。

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

指标值低于0.5意味着市场处于一种趋势中。

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

极低的价值往往是在当前趋势结束(修正)之前 - 它已经在图上 - 这里拖网工作(当在市场上)。


指标值高于0.5意味着市场状况平稳

iVAR_1 > 0.5 && 

极高的数值往往是在一个重要趋势开始之前--见前面的解释。

指标值在0.5左右意味着不确定的市场形势--这里可以使用一些 "水平 "的缩进(我不排除它是多余的,即取值0.5和所有),既低于-x,又高于-y 值0.5(基础水平),把它们放到外部变量中,用0.02的步骤进行优化,比方说,与变量n 一样--开始:2步骤:1停止:7--这不是多余的,我做了--很快我将在Avalanche分支发布结果(它是趋势系统...:-)),只与马丁的MM...和所有...:-)))).

 
Roman.:


我把这个指标看作是进入市场的过滤器,无论是趋势还是平坦的策略,即我对其读数的解释如下。

指标值低于0.5,表明市场状况呈趋势性发展。

极低的价值往往是在当前趋势结束(修正)之前--这已经适合于这个数字--这里的拖网工作(当在市场上)。


指标值高于0.5意味着市场状况平淡

极高的数值往往是在一个重要趋势开始之前--见前面的解释。

指标值在0.5左右意味着不确定的市场条件--这里可以使用一些缩进的 "水平"(我不排除它是多余的,也就是说。取值0.5和所有),都低于-x,高于-y 值0.5(基础水平),将它们输入外部变量,并以0.02的步骤进行优化,比方说,与变量n 相同--开始:2步骤:1停止:7--这并不过分,我就是这么做的--很快我将在Lavina分支发布结果(这是趋势系统...:-)),只与马丁的MM...和所有...:-)))).

我不喜欢优化:本质是一种配合...而且我从来没有优化过我的婴儿的参数...我试图为不同的市场条件选择必要的参数。

谢谢你的澄清,不过...:)老实说--抓住上面的帖子是朝火鸡的方向投掷石子......。:)

 

下午好!

我有这样一个问题。专家顾问有一个将交易写入csv 文件的功能,但我发现一个问题,当我在专家顾问参数中启用/禁用(TRUE/FALSE资金管理系统 选项时,会出现这个问题。例如,在编译源文件后,一切工作正常,交易都按计划写入文件中。下图说明了正确写入的数据。

然后在测试器中,我在专家顾问参数中启用资金管理系统选项,运行测试,但数据没有正确写入文件。下图显示了两种变体供比较。左边的是正确的(如上),右边的是不正确的。

我还没能自己弄清楚这可能是怎么回事,但我发现了以下内容。如果我也启用/禁用资金管理系统选项,并在开始测试前再次编译源文件,一切都能正确写入。

你能告诉我问题可能是什么吗?

 
artmedia70:

我不喜欢优化:本质是适合...而且我从来没有优化过我的产品的参数...我试图让他们为不同的市场条件选择必要的参数。

虽然,谢谢你的澄清......:):)


我明白了...如果你有兴趣,这里有一个类似的东西(在预告片中)。也请看这里(整个主题)--有一个高于/低于0.6的处理方法,以及这里(选择性的页面)。

附加的文件:
 
Roman.:


我正在亲自测试这个问题

很容易通过iCustom()添加(插入)到EA中。

谢谢,我下载了它,我将在我的专家顾问中测试它。