[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 417

 

你能做一个机器人,用小的止损点开 两边的,并选择一个胜利的位置吗? 还是说这是一个幻想?

 

颜色没问题...

问题是--我想从DC中 "隐藏SL",也就是说,不是用开放操作符来设置它,而是将它分配给专家内部的变量。

外来的双倍TrailingStop=25.0。

外来的双倍Lots=0.1。

....
双重StopB。

.....

如果(输入条件) {

ticket=OrderSend(Symbol(,OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green);
StopB=Ask-TrailingStop*Lots; //hide
stop < - 我的做法对吗?

}

.....

if(盈利退出条件|| Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //
平仓
return(0); //退出
}

那我们在哪里写SL的退出条件呢?与利润结算条件一起使用"||"还是单独使用?

 

日安!请告知如何正确使用iCustom功能,我想通过指标的颜色为交易创造条件,这是在一个单独的直方图窗口中绘制的。

color Oct_1=iCustom(NULL,0, "octava_1")。

If ( Oct_1==Green)....等。

当编译程序时,出现了一个错误,说"'绿'--变量未定义,这是什么原因?

如果能得到答复,我将非常感激)))。

 

问题删除,大写字母有一个含义))))

 
DOCTORS:

颜色没问题...

问题是--我想从经纪公司那里 "隐藏SL",也就是说,我不想用开盘操作符设置它们,而是将它们分配给专家内部的变量。

外来的双倍TrailingStop=25.0。

外来的双倍Lots=0.1。

....
double StopB;

.....

如果(输入条件) {

ticket=OrderSend(Symbol(,OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green);
StopB=Ask-TrailingStop*Lots; //hide
stop < - 我的做法对吗?

}

.....

if(盈利退出条件|| Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //
平仓
return(0); //退出
}

那我们在哪里写SL的退出条件呢?与利润结算条件一起使用"||"还是单独使用?

我不是专家,但我也在想同样的事情。我个人是这样写的(专业人员来了会纠正我)。

这一部分捡起一个未平仓的订单,并将止损和止盈值分配给变量

// +----------------------------------------------------------------------+
//------- : функция поиска открытых ордеров по символу графика, подхват и установки уровней стопа и профита
double TradeSymbol()
   {
   int    TotalTradeSymbol = 0;
   int    SendGo           = 0;
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(StopLoss   > 0 && Bid < OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() - StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits);}
          }
        if(OrderType()== OP_SELL)
          {
          if(StopLoss   > 0 && Ask > OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() + StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() - TakeProfit*Point, Digits);} 
          }
        if(OrderStopLoss()   != sl){SendGo++;}
        if(OrderTakeProfit() != tp){SendGo++;}
        if(!UseVirtualTradeLevel && SendGo != 0) {OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE);}
        TotalTradeSymbol++;
        }
      }
    return(TotalTradeSymbol);  
    }
// +----------------------------------------------------------------------+

这一部分检查和关闭在采取

// +----------------------------------------------------------------------+
//------- : функция проверки тейкпрофита
void CheckTakeProfit()
   {
   if(tp == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid > tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask < tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+

该部分在停止时检查并关闭

// +----------------------------------------------------------------------+
//------- : функция проверки стоплоса
void CheckStopLoss()
   {
   if(sl == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid < sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask > sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+
P.S.

专业人士--不要嘲笑自学成才的人,也许可以有所不同,但对我来说是可行的....。

 
elmucon:

我不是专家,但我也在想同样的事情。我个人是这样写的(如果你是专家--纠正我)。

这一部分捡起一个未平仓的订单,并将止损和止盈值分配给变量

这一部分检查和关闭在采取

该部分在停止时检查并关闭

P.S.

专业人士--不要嘲笑自学成才的人,也许可以有所不同,但对我来说是可行的....。

一切实际上都很好!唯一的一点是,在进入/离开时有几个奇怪的地方。嗯,而且这样的策略并不能避免滑坡。但是,非常感谢!
 

我如何确定当前EA的时间框架?

如果时间框架是M1,我需要满足一个条件,如果时间框架是M5,我需要满足另一个条件。

 
sss2019:

你能告诉我如何确定EA的当前时间框架吗?

如果时间框架是M1,我需要满足一个条件,如果时间框架是M5,我需要满足另一个条件。


使用Period()函数
 
sss2019:

我如何确定当前EA的时间框架?

如果时间框架是M1,我需要满足一个条件,如果时间框架是M5,我需要满足另一个条件。

if (Period()==1) return; //Условие минуток
if (Period()==5) bool working=true; //Условие пятиминуток
 
splxgf:


谢谢你。所以M1期对应的是数值1,M5期对应的是数值5,所以原来H1期对应的是60,H4期是240,对吗?

我需要这样的结构:当选择M1期时,情况是1,当选择M15期时,情况是15。这能行吗?还是必须按顺序进行案例1、案例2、案例3?

  switch(Period())
    {
    case 1 : Ba = 60;
    case 5 : Ba = 12;
    case 15 : Ba = 4;
    case 30 : Ba = 2;
    case 60 : Ba = 1;
    }
原因: