Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1229

 
datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
int af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);                                // Шаг 1: OrderSelect Выбираем ордер (SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == "EURUSD") && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ EURUSD отсутствует,И если ордер присутствует , и ни один из ордеров НЕ содержит магикномер, то выходим из цикла.( выходим -значит откр. позицию) 
                                                                                    (если какое-либо условие из двух указанных не совпадает, то выходим) 
}
          

             
if ((Close[0]>High[1]))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1]))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}

Tengo entendido que es como una comprobación periódica de la disponibilidad. (¿Hay EURUSD? y ¿hay una orden con el Magic especificado?) Si falta alguna de las condiciones, abrimos una posición. Sólo si se cumplen ambas condiciones, abrimos una posición.

A continuación, se nos pregunta en el paso 2. Supongamos que tenemos una orden abierta manualmente. Entonces cumplimos la primera condición (tenemos el mismo símbolo) y no cumpliremos la segunda, ya que esta orden no contiene magia. Y si una de las condiciones no coincide, entonces el código debe abrir la orden. Esto es exactamente lo que hace el código. Pero en el siguiente tic, abre la tercera, cuarta y quinta orden.....

¿Por qué abre una tercera orden?

Pero hay dos pedidos que cumplen ambas condiciones en total. Debería haber una comprobación (cambio a return(0)), no una apertura. , no la apertura.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
¡Buenas noches a todos! ¿Puedes decirme si puedes escribir un código en mql5 que dibuje una línea en el gráfico (imagen adjunta) y registre todas las coordenadas de esta línea en el archivo? Si quiere utilizar esta línea como base para el futuro, entonces tiene que utilizarla como base para el robot de comercio. directo
 
GlushkoV_V_V:
¡Buenas noches a todos! ¿Puedes decirme si puedes escribir un código en mql5 que dibuje una línea en el gráfico (imagen adjunta) y registre todas las coordenadas de esta línea en el archivo? Si quieres dibujar una línea y rellenarla con las coordenadas, entonces tienes que hacer un simple trazado de la línea.

Todo está en la documentación.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Сергей Таболин:

Todo está en la documentación.

Gracias por el consejo, tal vez usted puede ayudarme a construir uno de estos de forma gratuita, por supuesto.

 
GlushkoV_V_V:

Gracias por el consejo, pero tal vez usted puede ayudarme a construir una de estas cosas, no de forma gratuita, por supuesto.

No es gratis - eso es para ti)))

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • www.mql5.com
Убрать из советника второй индикатор заменить другим,изменить условие открытие ордера .Условие сделки покупка: НМА линия вверх второй индикатор столбик гистограмы выше нуля (второй индикатор пересечение нуля точка входа) по закрытой свече если нма и второй индикатор не изменили показания совершается покупка для продаже наоборот.Изменить...
 
Muchas gracias, pero para mí está como en chino y no sé cómo implementarlo en el código.
 
Alexey Belyakov:

Tengo entendido que es como una comprobación periódica de la disponibilidad. (¿Hay EURUSD? y ¿hay una orden con el Magic especificado?) Si falta alguna de las condiciones, abrimos una posición. Sólo si se cumplen ambas condiciones, abrimos una posición.

A continuación, se nos pregunta en el paso 2. Supongamos que tenemos una orden abierta manualmente. Entonces cumplimos la primera condición (tenemos el mismo símbolo) y no cumpliremos la segunda, ya que esta orden no contiene magia. Y si una de las condiciones no coincide, entonces el código debe abrir la orden. Esto es exactamente lo que hace el código. Pero en el siguiente tic, abre la tercera, cuarta y quinta orden.....

¿Por qué abre una tercera orden?

Pero hay dos pedidos que cumplen ambas condiciones en total. Debería haber una comprobación (cambio a return(0)), no una apertura. pero no la apertura.

== - si es igual != - si no es igual. Continuidad - fin de la iteración del bucle y comienzo de una nueva iteración del bucle. Breaking - terminación del ciclo y transición al siguiente operador que sigue el ciclo, return - terminación de la función, en su caso Onstart y espera de un nuevo tick. Y si una orden con su magik está abierta, debe terminar la función y dejar a la espera de una nueva garrapata.

Pregunta, si quieres abrir una orden en la ventana actual, ¿por qué necesitas especificar la herramienta explícitamente, o quieres abrir órdenes desde la ventana de otra herramienta? Tampoco está claro cuántas órdenes quiere abrir. Según su código, sólo se puede abrir un pedido y sólo después de cerrarlo se abrirá el segundo. Tienes un mago y una herramienta de ventana abierta. Además, las condiciones de apertura de la orden se comprueban para el instrumento actual y no para los eurobucks.

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                           
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return(0); // Шаг 2: Если символ Выбранного ордера 
                                        //равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт.
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента. 
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber); // так же здесь цены аск и бид тоже для текущего инструмента
}

if ((Close[0]<Low[1]))  
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber); // и поинт кстати тоже.
}

return(0);
}
 
Valeriy Yastremskiy:

== - si es igual != - si no es igual. Kontinue - termina la iteración del bucle y comienza una nueva iteración del bucle. Break - termina el bucle y pasa al siguiente operador que sigue al bucle, return - termina la función, en su caso OnStart y espera un nuevo tick. Y si una orden con su magik está abierta, debe terminar la función y dejar a la espera de una nueva garrapata.

Pregunta, si quieres abrir una orden en la ventana actual, ¿por qué necesitas especificar la herramienta explícitamente, o quieres abrir órdenes desde la ventana de otra herramienta? Tampoco está claro cuántas órdenes quiere abrir. Según su código, sólo se puede abrir un pedido y sólo después de cerrarlo se abrirá el segundo. Tienes un mago y una herramienta de ventana abierta. Además, las condiciones de apertura de la orden se comprueban para el instrumento actual y no para los eurobucks.

- Sí, quiero abrir en la ventana actual;

- Una orden. La siguiente orden no se abre hasta que se cierra la anterior.

"Además, las condiciones de apertura de la orden se comprueban para el instrumento actual y no para los eurobucks" - entonces ?

((OrderSymbol() == "EURUSD" )  ???
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Belyakov:

- Sí, quiero abrir en la ventana actual;

- Una orden. La siguiente orden no se abre hasta que se cierra la anterior.

"Además, las condiciones de apertura de la orden se comprueban para el instrumento actual y no para los eurobucks" - entonces ?

Y lo que entonces, por ejemplo, usted tiene una ventana abierta no Eurobucks, pero el Eurofunt, se compara el símbolo de la orden seleccionada con Eurobucks, si es cierto, entonces en el Eurobucks hay una orden, y si nuestro magik, entonces returnee de la función OnStart, y si no, entonces establecemos una orden en el Eurobucks, pero Kloz, alta, Asc, Bid, tendrá un error al abrir órdenes, porque Bid y Asc para estos instuents son diferentes. Y Symbol() devolverá el símbolo de la ventana actual y no se producirá ningún error.

Puede utilizar una plantilla desde el editor de meta, hay un botón Nuevo en la parte superior izquierda. La función OnStart se sigue utilizando, pero no está bien, y OnStart es para los scripts. La plantilla correcta.

//+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://qstr.ru"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

Código correcto. Falta el comentario de tu pedido y el mago no está contabilizado en tu código. ¡¡¡En las advertencias a la línea de apertura anote Conversión de tipo implícita de un número a una cadena!!!

//+------------------------------------------------------------------+
//|                                                    forumtest.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                                  https://qstr.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://qstr.ru"
#property version   "1.00"
#property strict

datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;  // Установили магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

for(int i = OrdersTotal(); i >=0; i--)                                            // цикл для проверки ордеров
{
bool af=OrderSelect(i, SELECT_BY_POS,MODE_TRADES);     // OrderSelect возвращает тип bool                           
                                               // Шаг 1: OrderSelect Выбираем ордер 
                                   //(SELECT_BY_POS - по порядковому номеру), (MODE_TRADES -из отложенных и открытых)

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return; // Шаг 2: Если символ Выбранного ордера 
                                        //равен EURUSD (заменено на текущий инструмент открытого окна) ,
                                       // И если магик Выбранного ордера равен магик то выходим из функции Онстарт.
// Если же наш ордер не будет выбран из ордеров терминала, то цикл закончится и начнется выставление ордеров. 
                                                                                   
}
          

             
if ((Close[0]>High[1])) // клоз и хай здесь для текущего окна и инструмента. 
{
send=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen); // так же здесь цены аск и бид тоже для текущего инструмента

}

if ((Close[0]<Low[1]))  
{
send=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,"My order",MagicNumber,0,clrGreen); // и поинт кстати тоже.
}

return;
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy:

hay muchos errores en su ejemplo

for(int i = OrdersTotal(); i >=0; i--)  

debería haber:

for(int i = OrdersTotal()-1; i >=0; i--)  

aquí los precios no están normalizados OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen);

Aquí no entiendo la lógica por la que es necesaria la salida de OnTick() si la condición es falsa.

if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == MagicNumber))return;

tal vez, deberíamos seguir con el bucley simplemente calcular cuántos pedidos hay

Tu ejemplo es muy simple en cuanto a la lógica y sería difícil modificarlo para otras tareas... tal vez le gustaría añadir el arrastre

Razón de la queja: