任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1037

 
Tema97:

我现在做什么?我有一个基于渠道的策略--有什么替代方案吗?

当然是有的。计算数值,将其保存到一个数组或结构中,并将其用于你的EA。你也可以从那里绘制对象--数值是可用的。
 
Tema97:

我现在做什么?我有一个基于渠道的策略--有什么替代方案吗?

有什么需要建立的?通过iCustom 查询该指标。
对于销售,你可以用#资源 来嵌入
 
我想实现以下目标
能够在一个工作表中添加不同的时间段(在不同的窗口,但在一个工作表中)。
请告诉我们该去哪里,该在哪里挖?)是否可以通过mql或WInApi实现?
也许文章中还有一些例子,我没能找到(
 
kocunyc89:

请帮助我解决这个问题!它给出的错误是'Void'--没有类型的声明 36 4,在哪里重新排列或写返回?
//--------------------------------------------------------------------
Void OnTick()
{

void是用小写字母而不是大写字母写的。看,这是一种不同的颜色。把光标放在这个词上,然后按F1键--这通常会有帮助。

修复后出现了很多错误信息......我修复了错误信息,但要自己检查逻辑。

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  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;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

空白是用小写的,而不是大写的大写。看看它是否是不同的颜色。把光标放在这个词上,然后按F1键--这通常会有帮助。

修复后出现了很多错误信息......修复了错误信息,但要自己检查逻辑。


非常感谢你,好心人!

 
你好,交易员先生们!我根据我上面发布的代码写了一个信号机器人。该机器人几乎准确地生成了期权的信号,但有两个柱状的滞后。我应该如何改变代码以产生相同的结果,但要早于两根柱子?还是不可能?谢谢你。
 
我有一个自定义指标--通道--我需要返回通道的上限值--如何做到这一点?
 
artmedia70:

int 变量正好包含1970年以来的秒数,而datetime 变量则包含日期。

如果你需要历史上的某一个条形,那么你如何指定它并不重要--按日期或按秒数,在任何情况下,该变量将显示这个特定条形的开盘时间,而不考虑新刻度的到来和新条形的开启。

非常感谢,但还有一个问题。我有一个具有统计功能的指标,这个功能应该只在新信号到来时使用,但这个问题在每个柱子上都要计算,我已经做了所有的事情,并将多维数据进行了正常化比较,所以我想我已经完蛋了。扼杀了整个晚上,谁能解释一下什么是错的 ????在193行中的指标是一个 带有条件的函数调用,但条件没有得到满足,而且Furction stat是在每个柱子到达时计算的,我已经厌倦了寻找错误,请各位帮助,!!!!!。预先感谢....
附加的文件:
 

我现在才发现,如果从另一个指标中调用该指标,当它们都在图表上时,统计函数会被重新计算。也就是说,一次是为自己计算,第二次是为调用它的指标计算。它是什么?

 

以下是图片中的内容。顶部的注释是发生计算的主指标中的缓冲区值,而打印(下面)是相同的缓冲区,但只是在另一个指标中调用并在打印中输出。差异很大,但是!!!!!。

第一个文件 是主文件,第二个文件调用第一个文件的缓冲区....。

附加的文件: