[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 424

 
gyfto:

那么,从理论上讲,如果额外的指标缓冲区是自我声明的,并使用进一步的趋势线,那么它将工作...

那么为什么文档中说
缓冲区的数量不能超过8
这里不清楚。它没有说是主缓冲区的数量,而不是所有的。它说的是缓冲区的数量,仅此而已。所以我读到这里,我的理解是,这应该适用于一个给定指标的缓冲区的总数。
 
gyfto:

不,我说的是ObjectCreate(),你必须在那里设置窗口号。我向你展示了如何设置它,如果它是一个子窗口(即不是零,也就是主窗口)。

所以你在创建对象 时有WindowOnDropped这个函数参数,而且它已经是相对于主窗口的排序。还是主窗口是终端中最左边的窗口
 

你好!我不明白为什么买入止损单不被删除。

extern double Lots       =0.01;
extern int    Magic      =333;

extern int    StopLoss      = 100;      // Размер фиксированного стопа
extern int    TakeProfit    = 100;       // Размер фиксированного тэйка
extern int    DistanceSet   = 160;      // Расстояние от рынка
extern int    Slippage      = 3;       // Проскальзывание цены
color  clOpenBuy     = LightBlue;    // Цвет ордера BuyStop
color  clOpenSell    = LightCoral;   // Цвет ордера SellStop
string Name_Expert   = "Scalp";

string Symb;
bool Work=true;

extern bool   UseSound       = True;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла
//============================================================================================
int start()
  {
   int
   Total,
   Tip=-1,
   Ticket,
   TicketB,
   TicketS,
   TicketMB,
   TicketMS,
   buys,
   sells,
   mbuys,
   msells;
   double
   OP_PriceSell,
   OP_PriceBuy, 
   Lot,
   Lts,
   Min_Lot,
   Max_Lot,
   Step,
   Free,
   One_Lot,
   Price,
   SL,
   TP,
   TP1,
   PriceB,
   PriceS,
   SLB,
   SLS;
   bool
   Ans  =false,
   Opn_B=false,
   Opn_S=false,
   Cls_B=false,
   Cls_S=false;
//============================================================================================
   // Учёт ордеров
   Symb=Symbol();
   Total=0;
   buys=0;
   sells=0;
   mbuys=0;
   msells=0;                                    
   for(int i=1; i<=OrdersTotal(); i++)
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true)
        {
         Total++;
         if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
         if(OrderType()==OP_BUY)  mbuys++;
         if(OrderType()==OP_SELL) msells++;
         if(OrderType()==OP_BUYSTOP) TicketB=OrderTicket();
         if(OrderType()==OP_SELLSTOP) TicketS=OrderTicket(); 
         Ticket=OrderTicket();
         Tip   =OrderType();
         TP    =OrderTakeProfit();
         Lot   =OrderLots();
        }
     }
//============================================================================================
   // Открытие ордеров
   while(true)                                  
     {
      if (Total==0)            
        {                                      
         star();
        }
      break;                                   
     }
//============================================================================================
  while(true)
     {
      if(Total==2)
        {
         if(msells==1)
           {
            if(buys==1)
              {
               if(OrderType()==OP_BUYSTOP && OrderLots()==Lots)
                 {
                  OrderDelete(Ticket);
                 }
              }
           }
        }
      if(Total==2)
        {
         if(mbuys==1)
           {
            if(sells==1)
              {
               if(OrderType()==OP_SELLSTOP && OrderLots()==Lots)
                 {
                  OrderDelete(Ticket);
                 }
              }
           }
        }
      break;
     }  
//============================================================================================
   return;
  }
//============================================================================================
//+------------------------------------------------------------------+
void star() {
  double ldStop=0, ldTake=0;
  double pAsk=Ask+DistanceSet*Point;
  double pBid=Bid-DistanceSet*Point;

  if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
  if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
  SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake);

  if (StopLoss!=0) ldStop=pBid+StopLoss*Point;
  if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
  SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake);
}

//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//| Параметры:                                                       |
//|   op     - операция                                              |
//|   pp     - цена                                                  |
//|   ldStop - уровень стоп                                          |
//|   ldTake - уровень тейк                                          |
//+------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake) {
  color  clOpen;
  string lsComm=GetCommentForOrder();

  if (op==OP_BUYSTOP) clOpen=clOpenBuy;
  else clOpen=clOpenSell;
  OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,0,0,clOpen);
  if (UseSound) PlaySound(NameFileSound);
}

//+------------------------------------------------------------------+
//| Генерирует и возвращает строку коментария для ордера или позиции |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
  return(Name_Expert+" "+GetNameTF(Period()));
}

//+------------------------------------------------------------------+
//| Возвращает наименование таймфрейма                               |
//+------------------------------------------------------------------+
string GetNameTF(int TimeFrame) {
        switch (TimeFrame) {
                case PERIOD_MN1: return("Monthly");
                case PERIOD_W1:  return("Weekly");
                case PERIOD_D1:  return("Daily");
                case PERIOD_H4:  return("H4");
                case PERIOD_H1:  return("H1");
                case PERIOD_M30: return("M30");
                case PERIOD_M15: return("M15");
                case PERIOD_M5:  return("M5");
                case PERIOD_M1:  return("M1");
                default:                     return("UnknownPeriod");
        }
}
//+------------------------------------------------------------------+
 
hoz:

那么为什么文件中说
缓冲区的数量不能超过8个
这就是不清楚的地方。它没有说主缓冲区的数量......不是所有缓冲区。它说的是缓冲区的数量,仅此而已。所以我在读它,它应该适用于一个给定指标的缓冲区的总数。

我不是在谈论指标缓冲区,我是在谈论模拟指标缓冲区。在IndicatorCounted()的包装器中有ArrayResize(CustomBuffer, Bars),最右边的趋势线的两端应该按bid重新绘制。

hoz:

所以你在创建对象时有一个函数参数--WindowOnDropped,而且它已经是相对于主窗口的一种了。还是主窗口 终端中的窗口中 最左边?
不,我一开始也很困惑。例如,我们有两个图表打开,欧罗巴和黄金。所以,它们的指数都是零。但如果它们有子窗口,则从一开始就进行编号。例如,我在eurenne图表上抛出了三个指数,在黄金上抛出了两个,所有五个指数都用#property separate_window和所有不同的子窗口。那么eurene将有0、1、2、3的窗口号码,黄金0、1、2。
 

我有一个问题。老实说,我的大脑正在沸腾。如果你能--帮助我。

int n=1, limit=3;
double result;//или int result, что не столь сейчас важно
double temp[];
int start(){
        for(int slow=10; slow<=10*limit; slow++){
                for(int fast=10; fast<=slow; fast++){
                        for(int period=1; period<=slow/10; period++){
                                n++; Print(n-1, ": ", slow-9, ", ", fast-9, ", ", period);
                                //здесь идёт тестирование машки с параметрами slow, fast, period, а результаты тестирования заносим в массив:
                                ArrayResize(temp,n); temp[n-1]=result;
                        }
                }
        }
        //и находим максимальный результат:
        int max=ArrayMaximum(temp);
   return(0);
}

现在有一个问题:我怎样才能通过最大值(即数组中一个项目的位置)恢复慢速、快速、周期 的值?在Print()中给出了数值被放入temp[]的顺序。我把3放在限制中,但任何数字都可以用在这里。下面是前77个值(limit=2)。

            10: 4, 4, 1  20: 6, 5, 1  30: 8, 2, 1  40: 9, 4, 1   50: 10, 5, 1   60: 11, 3, 1  70: 11, 8, 1
1: 1, 1, 1  11: 5, 1, 1  21: 6, 6, 1  31: 8, 3, 1  41: 9, 5, 1   51: 10, 6, 1   61: 11, 3, 2  71: 11, 8, 2
2: 2, 1, 1  12: 5, 2, 1  22: 7, 1, 1  32: 8, 4, 1  42: 9, 6, 1   52: 10, 7, 1   62: 11, 4, 1  72: 11, 9, 1
3: 2, 2, 1  13: 5, 3, 1  23: 7, 2, 1  33: 8, 5, 1  43: 9, 7, 1   53: 10, 8, 1   63: 11, 4, 2  73: 11, 9, 2
4: 3, 1, 1  14: 5, 4, 1  24: 7, 3, 1  34: 8, 6, 1  44: 9, 8, 1   54: 10, 9, 1   64: 11, 5, 1  74: 11, 10, 1
5: 3, 2, 1  15: 5, 5, 1  25: 7, 4, 1  35: 8, 7, 1  45: 9, 9, 1   55: 10, 10, 1  65: 11, 5, 2  75: 11, 10, 2
6: 3, 3, 1  16: 6, 1, 1  26: 7, 5, 1  36: 8, 8, 1  46: 10, 1, 1  56: 11, 1, 1   66: 11, 6, 1  76: 11, 11, 1
7: 4, 1, 1  17: 6, 2, 1  27: 7, 6, 1  37: 9, 1, 1  47: 10, 2, 1  57: 11, 1, 2   67: 11, 6, 2  77: 11, 11, 2
8: 4, 2, 1  18: 6, 3, 1  28: 7, 7, 1  38: 9, 2, 1  48: 10, 3, 1  58: 11, 2, 1   68: 11, 7, 1
9: 4, 3, 1  19: 6, 4, 1  29: 8, 1, 1  39: 9, 3, 1  49: 10, 4, 1  59: 11, 2, 2   69: 11, 7, 2
 
gyfto:

我有一个问题。老实说,我的大脑正在沸腾。如果你能--帮助我。

现在有一个问题:我怎样才能通过最大值(即数组中一个项目的位置)恢复慢速、快速、周期的值?在Print()中给出了数值被放入temp[]的顺序。我把3放在限制中,但它可以是任何数字。


其中 "n++"检查结果是否为最大值,如果是最大值,则记住慢、快等值。
 
你可以再做三个数组(或一个三维数组),用于慢速、快速...这样做更好,因为万一你想以某种方式对结果进行排序,总会有测试参数可用。
 
如果这些动作很频繁,例如每个柱子或10个柱子一次,最好是将结果的数组进行缩放,在initem中用参数值的三个数组,滚动浏览这些循环,用周期值填充数组。然后在一个循环中全部滚动。然后我们将能够使用ArrayMaximum函数,并将事情整理出来。这将使工作尽可能快地进行。
 
gyfto:

不,我一开始也很迷惑。例如,我们有两个图表打开,欧元和黄金。所以,它们的指数都是零。但如果它们有子窗口,则从一开始就进行编号。例如,我在eurenne图表上抛出了三个指数,在黄金上抛出了两个,所有五个指数都用#property separate_window和所有不同的子窗口。那么Eurene将有0、1、2、3的窗口数字,而黄金将有0、1、2。

正是如此!只是我根本不和火鸡打交道,所以我在研究帮助的时候没有注意。这一切都很有意义。

gyfto

我不是在谈论指标缓冲区,我是在谈论模拟指标缓冲区。在IndicatorCounted()的封装器中有ArrayResize(CustomBuffer, Bars),最右边的趋势线的末端应该被Bid重新绘制。

而我具体问的是如何在一个图形上画出超过6条线。在哪个窗口(0或其他,这并不重要)。这是我最感兴趣的,也是我一开始就问你的问题。
 
Integer:

其中 "n++"使检查最大的结果,如果最大,记住慢、快等的值

没想过这个问题。


整数:
你可以再做三个数组(或一个三维数组),用于慢速、快速...这样更好,因为万一你想以某种方式对结果进行排序,总会有测试参数可用。

三维是最理想的,但ArrayMaximum() 只对一维起作用,所以你必须把数组收敛成一个线性数组,而且你又得弄清楚所有东西的位置。但我有fastMax=slow,这就是麻烦所在。但三个不同的阵列...我有同样的结果,所以不是一个三维的就是一个线性的。


整数
结果的比例数组

我不知道这个术语,请解释一下。在一个立方体中创建一个长度的线性阵列?


好吧,至少已经有了一个选项。通过MathMax(result, resultPrev)。