[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 424

 
gyfto:

Bueno, en teoría, si se autodeclaran topes de indicadores adicionales y se utilizan más líneas de tendencia, entonces funcionará...

Entonces, ¿por qué la documentación dice que
el número de búferes no puede ser superior a 8
No está claro aquí. No dice que es el número de buffers principales, no todos. Dice el número de topes y ya está. Así que estoy leyendo esto y tengo entendido que esto debería aplicarse al número total de topes para un indicador dado.
 
gyfto:

No, me refiero a ObjectCreate(), ahí tienes que poner el número de ventana. Te mostré cómo configurarlo si se trata de una subventana (es decir, no cero, que es la ventana principal).

Así que usted tiene el parámetro de función WindowOnDropped allí al crear un objeto, y ya es una especie de la ventana principal relativamente. ¿O la ventana principal es laventana más a la izquierda del terminal?
 

Hola! No puedo entender por qué las órdenes de buystop no se borran.

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:

Entonces, ¿por qué la documentación dice que
el número de buffers no puede ser superior a 8
? No dice el número de buffers principales... no todos los buffers. Dice el número de topes y ya está. Por lo que estoy leyendo se supone que se aplica al número total de topes de un indicador determinado.

No me refiero a los topes de los indicadores, sino a los topes de los indicadores simulados. Y allí ArrayResize(CustomBuffer, Bars) en el wrapper de IndicatorCounted(), y los extremos de las líneas de tendencia de la derecha deben ser redibujados por Bid.

hoz:

Así que usted tiene un parámetro de la función allí al crear un objeto - WindowOnDropped, y ya es una especie de la ventana principal relativamente. ¿O es la ventana principal la que está más a la izquierdaentre las ventanas del terminal?
No, yo también estaba confundido al principio. Por ejemplo, tenemos dos gráficos abiertos, euron y oro. Por lo tanto, ambos tienen un índice de cero. Pero si tienen subventanas, se numeran a partir de una. Por ejemplo, he lanzado tres índices en el gráfico de eurenne, dos en el de oro, y los cinco con #property separate_window y todas las subventanas diferentes. Entonces eurene tendrá los números de ventana 0, 1, 2, 3 y oro 0, 1, 2.
 

Tengo una pregunta. Mi cerebro está hirviendo, sinceramente. Si puedes, ayúdame.

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);
}

Ahora una pregunta: ¿cómo puedo restaurar los valores lentos, rápidos, período por el máximo (que es la posición de un elemento en la matriz)? El orden en el que se ponen los valores en temp[] se da en Print(). He puesto 3 en el límite, pero se puede utilizar cualquier número. Aquí están los primeros 77 valores (límite=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:

Tengo una pregunta. Mi cerebro está hirviendo, sinceramente. Si puedes, ayúdame.

Ahora una pregunta: ¿cómo puedo restaurar los valores lentos, rápidos, período por el máximo (que es la posición de un elemento en la matriz)? El orden en el que se ponen los valores en temp[] se da en Print(). He puesto 3 en el límite, pero puede ser cualquier número.


Donde "n++" comprueba si el resultado es máximo, si es máximo, recuerda los valores de lento, rápido, etc.
 
Podrías hacer tres matrices más (o una matriz tridimensional) para lento, rápido... Esto es mejor, porque en caso de que quiera ordenar los resultados de alguna manera, siempre habrá parámetros de prueba disponibles.
 
Si estas acciones son frecuentes, por ejemplo, una vez por barra o 10 barras, es mejor escalar las matrices para los resultados y tres matrices con los valores de los parámetros en el initem, desplazarse por estos bucles, llenar las matrices con los valores del período. Luego, desplázalo todo en un bucle. Entonces podremos utilizar la función ArrayMaximum, y ordenar las cosas. Esto hará que el trabajo sea lo más rápido posible.
 
gyfto:

No, yo también estaba confundido al principio. Por ejemplo, tenemos dos gráficos abiertos, el euro y el oro. Por lo tanto, ambos tienen un índice de cero. Pero si tienen subventanas, se numeran a partir de una. Por ejemplo, he lanzado tres índices en el gráfico de eurenne, dos en el de oro, y los cinco con #property separate_window y todas las subventanas diferentes. Entonces el eureno tendría los números de ventana 0, 1, 2, 3 y el oro tendría 0, 1, 2.

¡Exactamente! Es que no trabajo con pavos para nada, así que no presté atención cuando estudiaba la ayuda. Todo tiene sentido.

gifto:

No hablo de topes indicadores, sino de topes indicadores simulados. Hay ArrayResize(CustomBuffer, Bars) en el wrapper de IndicatorCounted(), y los extremos de las líneas de tendencia de la derecha deben ser redibujados por Bid.

Y yo preguntaba específicamente cómo dibujar más de 6 líneas en un gráfico. En qué ventana (0 u otra, no importa). Eso es lo que más me interesa y por lo que te pregunté en primer lugar.
 
Integer:

Donde "n++" hace que se compruebe el resultado máximo, si es máximo, recuerda los valores de lento, rápido, etc.

No lo pensé.


Entero:
Puedes hacer tres matrices más (o una matriz tridimensional) para... Eso es mejor, porque en caso de que quiera ordenar los resultados de alguna manera, siempre habrá parámetros de prueba disponibles.

Lo ideal es la tridimensionalidad, pero ArrayMaximum() sólo funciona en la unidimensionalidad, así que tendrás que hacer converger el array en uno lineal, y de nuevo tendrás que averiguar dónde está todo. Pero tengo fastMax=slow, y ese es el problema. Pero tres matrices diferentes... Tengo el mismo resultado, así que es una tridimensional o una lineal.


Entero:
escala matrices para los resultados

No conozco esta terminología, por favor explíqueme. ¿Crear una matriz lineal de longitud en un cubo?


Bueno, al menos ya hay una opción. A través de MathMax(result, resultPrev).

Razón de la queja: