Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 153

 
EVladMih:

Artemisa, empezaste desde el segundo post explicando al hombre que combinaba blanco con caliente, y lo único que explicaste fue la parte de la pregunta que nadie te preguntó. Resulta que sé la cantidad de código que escribió este hombre, y fuiste TÚ quien no entró en el punto, no él. Por cierto, este código no lo escribe para sí mismo, sino para la gente.

Así que si no quieres o no puedes ayudar, al menos no interfieras y no acuses a los demás de tus pecados.

Los hombres que están más informados, por favor ayuden a satorifx. Realmente necesita mezclar lo blanco con lo caliente, pero no es su culpa... Usted conoce las particularidades de MT4, donde las cosas de la misma ópera se cantan en diferentes escenarios (diferentes sistemas de coordenadas).

En primer lugar. En primer lugar, no te estoy tuteando. Segundo: aprende a leer correctamente el apodo de una persona, ya que no puedes utilizarlo. Tercero - Te daré una pista sobre cómo identificar el cruce con la línea de tendencia. En el ejemplo escrito específicamente para principiantes, la línea de tendencia en sí no se utiliza para los cálculos. Es sólo una pista en qué dirección moverse. Sin embargo, hay muchos métodos para este problema. No es necesario insistir en el problema de la incompatibilidad de coordenadas, sino decidir cómo salir de la situación con los datos de entrada disponibles.

И... esto... Puedo escribir lo que aún no has soñado...

 

EVladMih:,

pero probablemente no deberías dividir a la gente en casas de baños sobre la base de local/no local.

No se trata de "local/no local" de una persona en particular. Se trata de la forma en que la persona hace la pregunta. Si entendí mal su pregunta, eso no le da derecho a ser grosero. Sinceramente, intenté ayudarle. Y creo que si después de mi respuesta me hubiera dicho que eso no era lo que quería y pedía, y me hubiera explicado la tarea concreta que le habían encomendado, habríamos solucionado todo de forma rápida y eficaz.

Ahora hablas de que no puede identificar el cruce con la línea de tendencia. Pero eso sólo te hace sonreír. ¿O tal vez me he equivocado de nuevo y me merezco otra grosería? La función simple ObjectGetValueByShift() devolverá el precio de la línea de tendencia en una barra determinada. Así que compara un precio con otro.

 
artmedia70:
Según tengo entendido, quiere que el objeto se sitúe verticalmente y no se desplace horizontalmente en el precio más bajo de las barras que se muestran en la pantalla. Le mostré la primera parte de su pregunta: cómo encontrar el precio mínimo en el gráfico. No entendió y me ladró. Ahora que busque por sí mismo cómo hacer lo que necesita sin cruzar dos sistemas de coordenadas. Esto es fácil. Tal vez otro lo haga por él, pero me despido. No me gusta la gente grosera y aprovechada, ni siquiera se molestó en investigar el asunto y escribir algo en código él mismo.

artmedia70, soy una persona no conflictiva y si he dicho algo incorrecto, me disculpo y pido que no se considere grosero.

Realmente no sé cómo resolver el problema.

Cruzado 2 sistemas de coordenadas hasta ahora de una manera sencilla: hizo una etiqueta y manualmente lo puso al precio mínimo - así que tengo una etiqueta de coordenadas Y y corresponde al precio mínimo, que obtengo con la función WindowPriceMin() . Pero es manual, me gustaría hacer un seguimiento y corregirlo programáticamente.

Si realmente hay una solución para esto, y además sencilla, agradecería la ayuda.


 
artmedia70:

Ahora dices que no puede detectar un cruce con la línea de tendencia. Pero eso me hace sonreír. ¿O he vuelto a malinterpretar todo y me merezco otra grosería? La función simple ObjectGetValueByShift() devolverá el precio de la línea de tendencia en una barra determinada. Así que compara un precio con otro.


No escuches a EVladMih - no tiene ningún sentido .
Sé muy bien cómo encontrar la distancia a la tendencia cuando se trata de precios. La cuestión es diferente.

Utilizo marcadores en mi indicador que cuelgan permanentemente en la parte superior de la pantalla. Es después de desplazar cualquier marcador que se debe determinar la distancia del marcador a la línea de tendencia, pero las marcas tienen coordenadas (x,y) en la pantalla, mientras que ObjectGetValueByShift trabaja con el precio, es decir, en otro sistema de coordenadas. De ahí viene todo el alboroto.

No puedo usar el objeto OBJ_TEXT con coordenadas de precio, porque quiero que se quede en un sitio, como hacen las etiquetas ( objeto OBJ_LABEL), si muevo el gráfico, en lugar de las etiquetas.

 
satorifx:

No escuches a EVladMih: escribe tonterías .
Sé muy bien cómo encontrar la distancia a la tendencia cuando se trata de precios. La cuestión es diferente.

En mi indicador utilizo marcadores que están constantemente en la parte superior de la pantalla. Es después del desplazamiento de cualquier marcador que se debe determinar la distancia del marcador a la línea de tendencia, pero las marcas tienen coordenadas (x,y) en la pantalla, mientras que ObjectGetValueByShift trabaja con el precio, es decir, en otro sistema de coordenadas. De ahí viene todo el alboroto.

Quiero decir de antemano que no puedo usar el objeto OBJ_TEXT con coordenadas de precio en lugar de etiquetas, porque quiero que éstas (las etiquetas) no se desplacen al precio si muevo el gráfico, sino que se queden en un sitio, como hacen las etiquetas (objeto OBJ_LABEL).

Para evitar tener que lidiar con los recálculos, utilice FLECHA con coordenada x constante = barra particular en lugar de etiquetas. Puede almacenar y modificar la barra en la descripción del objeto. En cuanto el objeto se mueva, escribe en su descripción una nueva coordenada x igual a la nueva barra. Así no habrá problemas con la búsqueda de precios. Y siempre localiza el objeto por su descripción en el eje horizontal. El eje vertical es el precio. Esta es una opción menos costosa. Y el objeto siempre estará en el eje x en el mismo lugar, correspondiente a un número de barra determinado.

ZS "...mis disculpas y por favor no lo tomes como algo grosero..." Está bien, déjalo... ;)

 

Me he inventado un indicador. Divide un par por otro, para obtener instrumentos no incluidos al terminal. Pero ahora carga el terminal y recalcula en cada tic. Lo he introducido como en mi Asesor Experto

if (Time[0]<=PrevTime) return(0);

PrevTime=Hora[0];

Ahora sólo se dibuja en una nueva vela. Por favor, dígame cómo hacerlo. Texto del indicador.

P/S/ Por cierto. Todos los pares se muestran con normalidad. Quiero ver el Appl al Rublo. No quiero verlo.

#property indicador_separar_ventana
#property indicator_buffers 1
#property indicator_color1 Lime
//--- parámetros de entrada
extern string Paar_1="EURUSD"; //Símbolo deseado para la comparación
extern string Paar_2="GBPUSD"; // instrumento deseable para la comparación
extern bool Espejo_Paar_2=false;
//--- buffers
doble ExtMapBuffer1[];
static int PrevTime=0;
int inicio=1;


//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int init()
{
//---- indicadores
string nombre_corto=Paar_1;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
IndicadorNombreCorto(nombre_corto);
SetIndexLabel(0,short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de indicadores personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int inicio()
{
if (Time[0]<=PrevTime && start==1) return(0);
PrevTime=Hora[0];
int, counted_bars=IndicatorCounted();
i=barras contadas-1;
//----
while(i>=0){
double Compare1=iClose(Paar_1,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
double Compare2=iClose(Paar_2,0,iBarShift(Paar_1,0,iTime(Paar_1,0,i),FALSE));
if(Compare2!=0 && Compare1!=0) double Compare=Compare1/Compare2;
if(Mirroring_Paar_2==1) Compare=1/Compare;

ExtMapBuffer1[i]=Compare;
RefreshRates();
i--;
}
//----
inicio=0;
return(0);
}
//+------------------------------------------------------------------+y

 
Hola
¡Ayuda! ¿Cómo puedo hacer un retardo entre las aperturas de las órdenes, Sleep 3000?
int start() {
string ls_0;
int li_8;
bool li_12;
int li_20;
int li_24;
double ld_28;
int li_36;
int li_40;
string ls_48;
string ls_56;
string ls_64;
double ld_76;
int li_84;
Y así es como se debe pegar.

Por si acaso el propio búho

¡Otra pregunta, este búho está configurado para siete pares a la vez, específicamente necesito hacer una pausa entre la apertura de la orden! Por ejemplo, hoy se han abierto 10 pedidos simultáneamente en las noticias y ¡lo necesito con retraso!

Gracias.

/* Descompilado eliminado - Vinin */

 

Acabo de acordarme, ¿podríais decirme dónde insertar Sleep(60000); para que haya un retardo entre las aperturas

if (ai_8 == OP_BUY) ad_20 = Ask;
if (ai_8 == OP_SELL) ad_20 = Bid;
if (!IsTradeContextBusy()) {
li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64)
if (li_68 > 0) {
Print("orderSendReliable(): ¡Éxito! Ticket: " + li_68);
return (li_68);
}



 

Lo has robado, pero no tienes ni idea de qué hacer con él))

No he escrito ningún asesor para mí, sólo leo, examino búhos torcidos en sus esquemas de bloques, tratando de entender el mejor enfoque

así que puedo estar equivocado.

int counterrore=0, //подщет количества ошибок открытия ордера
timesleep=10000; // время задержки
while () // до тех пор пока не будет выход с цыкла
{
 if (!IsTradeContextBusy())
 { 
  RefreshRates(); // последние данные
  if (ai_8 == OP_BUY) ad_20 = Ask;
  if (ai_8 == OP_SELL) ad_20 = Bid;
  li_68 = OrderSend(as_0, ai_8, ad_12, NormalizeDouble(ad_20, MarketInfo(as_0, MODE_DIGITS)), ai_28, NormalizeDouble(ad_32, MarketInfo(as_0, MODE_DIGITS)), NormalizeDouble(ad_40,
  MarketInfo(as_0, MODE_DIGITS)), as_48, ai_56, ai_60, ai_64);
  if (li_68 > 0) 
  {
   Print("orderSendReliable(): Success! Ticket: " + li_68);
   return (li_68);
  }
  Print("orderSendReliable(): False! Error " + GetlastError()); // поищите коректную функцию обработки ошибок
  counterrore++; // количество неудач - сумирование

  if(counterrore>6) // если не удалось 6 раз открыть
  {
   Print("orderSendReliable(): Error!!! " +counterrore+"times --return(-1)" ); // сообщаем логу о даной трагедии
   return (-1); // -1 или что там Вы придумаете для отработки ситуации
  }
 }
 Sleep (timesleep); // время сна для цикла посылки  запроса на сервер и для !IsTradeContextBusy()
}
 
Ahora vendrán los moderadores y banearán a los dos últimos delante de mí :-))