[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 436

 
semiromid:

Прошу помощи .

Как в этот коментарий "Возникла ошибка " можно добавить переменную ?

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, "Возникла ошибка ", 0);


cadena Stroka;

doble x;

.............

.............


Stroka=StringConcatenate("Se ha producido un error ", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);

 
bercut0077:

Buenas tardes expertos, en el indicador me interesa el valor obtenido por el Asesor Experto

Constantes especiales utilizadas para indicar el estado de los parámetros y las variables. Pueden ser los siguientes valores:

Constante Valor Descripción
NULL 0 Indica el estado de la cadena vacía
VACÍO -1 Indica el estado vacío del parámetro
VALOR_VACÍO 0x7FFFFFFFF Valor por defecto, puntero a un valor vacío. Se utiliza en los indicadores personalizados
CLR_NONE 0xFFFFFFFFFF Indica que no hay color
ARREGLO_COMPLETO 0 Se utiliza con funciones de matriz. Indica que todos los elementos de una matriz deben ser procesados


0x7FFFFFFFF en hexadecimal es igual a 2147483647 en decimal.

Es decir, en algún momento, aparece un valor vacío en el buffer del indicador - esto es lo que se ve en el Asesor Experto. Puede establecer el "valor vacío" del buffer del indicador:

void SetIndexEmptyValue( int index, double value)

Establece el valor vacío para la línea del indicador. Los valores en blanco no se dibujan ni se muestran en la DataWindow. El valor por defecto del valor vacío es EMPTY_VALUE.
Parámetros:
índice - Índice - número de índice de la línea. Debe ser de 0 a 7.
valor - Nuevo valor "vacío".
 
peshihod:


Es decir, ¿la hora de apertura no importa si se ha abierto hace un minuto o dos?

El punto 2 no está claro. Todo es un poco vago.

La hora de apertura puede determinarse mediante OrderOpenTime().

Es decir, el momento de la apertura no importa, ¿se abrió hace un minuto o dos?


Мгновенное открытие

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .

 
peshihod:

cadena Stroka;

doble x;

.............

.............


Stroka=StringConcatenate("Se ha producido un error ", DoubleToStr(x, 0) );

OrderSend(Symbol(),OP_SELLSTOP,0.1,Ask-50*Point,3,Bid+150*Point,Bid-150*Point, Stroka, 0);


Buena combinación. Um...
 
artmedia70:

Constantes especiales utilizadas para indicar el estado de los parámetros y las variables. Pueden ser los siguientes valores:

Sí está claro, pero no está claro cómo curar el indicador de estos valores vacíos, por eso he publicado el código, necesito ayuda real, es decir, necesito que el indicador salga siempre 1 o -1.
 
bercut0077:
Sí está claro, pero no está claro cómo curar el indicador de estos valores vacíos, por eso he publicado el código, necesito ayuda real, es decir, necesito que el indicador siempre salga 1 o -1.
He proporcionado un ejemplo de una función que establece el valor de un valor vacío para una línea de indicador. Puedes hacerlo de otra manera. Si sólo necesita dos valores +1 y -1, cuando aparezca un valor vacío, compruebe el estado pasado (+1 o -1) e introdúzcalo en lugar del valor vacío. Entonces siempre habrá +1 o -1 en el buffer.
Supongamos que hay un valor de +1. Aparece un valor vacío. En su lugar, siga introduciendo el valor anterior (+1) en el búfer en cuanto aparezca -1, y luego introdúzcalo en el búfer.
Ahora habrá -1 en el buffer. En cuanto aparece un valor vacío, se comprueba el valor anterior (ahora es -1), y se introduce en el buffer.
De esta manera siempre tendrás +1 o -1 en el buffer
 
artmedia70:

Gracias. Ha surgido otra tarea...
 
semiromid:

1.Моментальное(Сиюсекундное +0.5 - 2 секунды) определение вновь открывшегося торгового(не отложеных ордеров) ордера(Ордера открытого вручную и открытого спомощью советника).Система идентефецируюет ордер из друх вариантов (Sell или Byu) .

Если система определила ордер который рание не был открыт . то идет продолжение под номером 2.

2. Выполняеться какая то задача (Например,если Sell: Alert("Открытый ордер на продажу"+y);),(Например,если byu: Alert("Открыт ордер на покупку"+w);), всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер(толи системой, толи вручную ), система вновь действует с пункта 1 по пункт 2 .


Entiendo que una orden pendiente y una orden abierta son órdenes diferentes. Y si la orden pendiente se abre, entonces la tarea se reduce a la inicial, a la orden abierta. Si lo entiendo bien, se está complicando mucho.

¿Cuáles son las tareas? Tal vez, todo se puede hacer de una manera más simple?

 
Estimados expertos ayuden a cambiar el código, tenemos que conseguir
Cur_Trend без пустой величины, тоесть если появляется пустота, то нужно заменить последним известным значением
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightBlue
#property indicator_color2 Magenta

double CrossUp[];
double CrossDown[];
double Cur_Trend[];
int CurrentTrend = 0;
int starttime = 0;
extern int FasterEMA = 5;
extern int SlowerEMA = 8;

int init()
  {
   IndicatorBuffers(3); 
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, CrossUp);
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, CrossDown);
   SetIndexBuffer(2, Cur_Trend);
   starttime = TimeLocal(); 
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start() { 
   int limit, i, counter, loop, ii;
   double fasterEMAnow, slowerEMAnow, fasterEMAprevious, slowerEMAprevious, fasterEMAafter, slowerEMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   loop = 0;
   for(i = 0; i <= limit; i++) {
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
      fasterEMAnow = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      fasterEMAprevious = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i+1);
      fasterEMAafter = iMA(NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);
      slowerEMAnow = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i);
      slowerEMAprevious = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i+1);
      slowerEMAafter = iMA(NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_OPEN, i-1); 
      if ((fasterEMAnow > slowerEMAnow) && (fasterEMAprevious < slowerEMAprevious) && (fasterEMAafter > slowerEMAafter)) {
         CrossUp[i] = Low[i] - Range*0.5;
         if ((loop == 0) && (CurrentTrend != 1))  {
            CurrentTrend = 1;
            Cur_Trend[ii]= CurrentTrend;
            }
         if (loop == 0)  {
            loop = 1;
            }
      }
      else if ((fasterEMAnow < slowerEMAnow) && (fasterEMAprevious > slowerEMAprevious) && (fasterEMAafter < slowerEMAafter)) {
              CrossDown[i] = High[i] + Range*0.5;
           if ((loop == 0) && (CurrentTrend != -1))  {
              CurrentTrend = -1;
              Cur_Trend[ii]= CurrentTrend;
           }
           if (loop == 0)  {
              loop = 1;
          }
       }
   }
   return(0);
}
 

¡Queridos expertos!

Necesito su ayuda con la siguiente pregunta. Tengo un indicador personalizado que dibuja una línea de dos colores con un color y luego otro. ¿Hay alguna forma de enseñar al Asesor Experto a determinar de qué color es la línea en este momento?

Archivos adjuntos:
Razón de la queja: