Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 389

 

Buenos días a todos.

He empezado a estudiar la programación de MQL5 no hace mucho, he estudiado la documentación y he visto algunos webinars en youtube. He conseguido hacer algunos pasos humildes :) Llevo tres días trabajando en ello :( Me gustaría pedir ayuda a los profesionales.

El concepto general es el siguiente: primero, obtenemos los precios Ask y Bid (utilicé MqlTick y SymbolInfoTick para este propósito), luego miramos si hay una operación abierta o no ( utilicé PositionsTotal para este propósito), si no hay posiciones abiertas, abrimos una posición a los precios Ack o Bid de acuerdo a una determinada condición. Es decir, si teníamos una operación previa de compra y resultó positiva (compramos bajo y cerramos alto), abriremos una nueva posición de compra... Esto es en términos generales :) El problema es que no puedo obtener información sobre cuál fue el tipo de última transacción y, en consecuencia, a qué precio se abrió y a qué precio se cerró...

Aquí está el código que escribí:

//+------------------------------------------------------------------+

//|                                                  SOVETNIK_01.mq5 |

//|                                                   Tokarev Sergey |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Tokarev Sergey"

#property link      "https://www.mql5.com"

#property version   "1.00"



//Мои подключаемые библиотеки

#include<Trade\Trade.mqh>           //Библиотека для структуры "CTrade", она отвечает за выполнение всех торговых операций

#include <Trade\PositionInfo.mqh>   //Библиотека для структуры "CPositionInfo" она выдаёт информацию по всем нашим позициям



//переменные для подключаемых классов и структур опишем тут

CTrade Trade;                 //Значение структуры "CTrade" поместим в переменную Trade

CPositionInfo PositionInfo;   //Значение структуры "CPositionInfo" поместим в переменную PositionInfo

MqlTick last_tick;            //В переменной last_tick будут храниться цены последнего пришедшего тика, для этого используем структуру "MqlTick"

MqlTradeRequest request;

MqlTradeResult result;

//глобальные переменные

double SL;                           //Переменная необходимая для преобразования размера StopLoss в зависимости от типа брокера

double TP;                           //Переменная необходимая для преобразования размера TakeProfit в зависимости от типа брокера

double Ask;                          //Переменная в которой будем хранить значения цены спроса

double Bid;                          //Переменная в которой будем хранить значение цены предложения

int MagicNumber=123456;    //Зададим MagicNumber для идентификации своих ордеров

int N;                     //В переменную N мы занесём кол-во открытых позиций                  

int Lot;                    //Укажем размер нашего лота

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают один раз при запуске эксперта                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   Trade.SetExpertMagicNumber(MagicNumber);        //Занесём наш номер в переменную Trade

   Lot=1;                                                  //Установим размер нашего лота

   return(0);

  }

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают один раз при остановке (закрытии) эксперта                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

  }

//+------------------------------------------------------------------+

//| Инструкции которые срабатывают при каждом новом тике цен                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   SymbolInfoTick(_Symbol,last_tick);   //Заполняем переменную last_tick последними ценами текущего символа, для этого используем "SymbolInfoTick"

   //Обновляем переменные Ask и Bid для дальнейшего использования

   Ask=last_tick.ask;

   Bid=last_tick.bid;

   Print("Цена ПРОДАЖИ = ",Ask);

   Print("Цена ПОКУПКИ = ",Bid);

//Определим существует ли открытая позиция или нет

   N=PositionsTotal();

   Print("Кол-во открытых позиций: ",N); 

   if(N==0)

      {

      //Если позиции нет то определим какая сделка была крайней

      HistorySelect(0,TimeCurrent());        //Загружаем историю наших сделок

      ulong last_deal_ticket;                   //Объявим переменную для тикета последней сделки

      ulong deals=HistoryOrdersTotal();      //Обяъвим переменную "deals" куда выгрузим количество наших сделок в целом из истории

      last_deal_ticket=HistoryDealGetTicket((int)deals-1); //получим тикет крайней сделки

      Print("Ticket крайней сделки: ",last_deal_ticket);

      long deal_type=HistoryDealGetInteger(last_deal_ticket,DEAL_TYPE); //Тут получить должны тип крайней сделки из истории

      Print ("Тип крайней ",deal_type);      

      //Если была на продажу то покупаем

      if (deal_type==BUY)

         {

         //Открываем наш ордер на покупку

         Trade.Buy(Lot,Symbol(),Ask,SL,TP);

         Print("Мы купили по цене: ",Ask);

} 

 

Gracias de antemano por su ayuda :)

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Karputov Vladimir:
Hace tiempo que me alejé de los libros de papel, así como de los libros piratas en formato electrónico. Me acostumbré a ello.

No se puede vivir con belleza.

Tengo recién llegados que me preguntan qué leer y no recuerdo lo que tengo.

 

¡Buenos días a todos!

Necesito obtener del campo de entrada de la ventana del EA el plazo seleccionado por el usuario en la lista desplegable. ¡Cómo utilizarlo en la función, estoy luchando con él por segundo día consecutivo, por favor, aconséjeme)!

Código:

input enum timeFrame {
Hora_1 = 60,
Hora_4 = 240,
Día_1 = 1440,
¡Semana_1 = 10080!

};


iADX(currencySelect, ¡Así se instalan los datos seleccionados!, ADXparam, PRICE_CLOSE, MODE_MINUSDI,2)


Gracias.

 
Сергей Михеев:

Insertar el código correctamente en el foro

Aquí hay un script de ejemplo, aplicando su enumeración:

//+------------------------------------------------------------------+
//|                                                       Primer.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum timeFrame
  {
   Hour_1 = 60,
   Hour_4 = 240,
   Day_1=1440,
   Week_1=10080
  };
input timeFrame MyTimeFrame=Hour_1;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(MyTimeFrame);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Insertar el código correctamente en el foro

Aquí hay un ejemplo de script, usando su listado:

Gracias.

Y más, por favor dime, ¿hay una construcción en MQ4 como un array asociativo con claves de texto, por ejemplo: Array["¡Aquí está la clave!"]?

 
Сергей Михеев:

Gracias.

Además, ¿podría decirme si MQ4 tiene una construcción como array asociativo con claves de texto, por ejemplo: Array["¡Aquí está la clave!"]?

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#define  Number                1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int Arr[]={ 12,15,4 };
   Print(Arr[Number]);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:
En tu ejemplo las claves son números y yo me refería a usar cadenas como clave.
 
Сергей Михеев:
En tu ejemplo, las claves son números, y yo me refería a usar cadenas como claves.
El acceso a los elementos del array se realiza por índice. El índice es un entero de tipo int.
 

¡Hola!

¿Puede usted por favor aconsejar cómo obtener información sobre las operaciones abiertas y cerradas en el código MQL EA (qué precio se abrió, lo que eran el TP y SL)? al menos para el último 1.

¿Y hay alguna función o biblioteca incorporada que devuelva un array con n últimos valores de media móvil(preferiblemente ponderada o exponencial)?

 
Alex317:

¡Hola!

¿Puede usted por favor aconsejar cómo obtener información sobre las operaciones abiertas y cerradas en el código MQL EA (qué precio se abrió, lo que eran el TP y SL)? al menos para el último 1.

¿Y hay alguna función o biblioteca incorporada que devuelva un array con n últimos valores de media móvil(preferiblemente ponderada o exponencial)?

Por favor, especifique siempre a qué versión de MQL4 o MQL5 se refiere su pregunta.
Razón de la queja: