Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 389

 

Доброго времени суток всем.

Я не так давно начал изучать программирование для MQL5, ознакомился с документацией и просмотрел некоторые вебинары на ютюбе. Удалось сделать несколько скромных шагов :)  но сейчас возникло затруднение над которым уже сижу третий день :( хотел обратиться за помощью к специалистам, чтоб подсказали.

Общая концепция такова мы получаем для начала цену Ask и Bid (Для этого я использовал MqlTick и SymbolInfoTick) потом смотрим есть открытая сделка или нет (Для этого я использовал PositionsTotal), если позиций открытых нет то мы открываем позицию по ценам Ack или Bid исходя из некоторого условия.  А именно если до этого крайняя сделка была проведена на покупку и она оказалась положительная (купили низко закрыли высоко) то мы откроем новую позицию на покупку... Это в общих чертах :) Проблема в том что ну никак не могу получить информацию о том какой был тип крайней сделки и соответсвено по какой цене она открылась и по какой она закрылась...

Вот код который мне удалось накарябыть:

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

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

} 

 

 

 Заранее очень признателен всем за помощь :)

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Karputov Vladimir:
Я давно отошёл от бумажных книг, а также от пираток в электронном виде. Привык.

красиво жить не запретишь.

 у меня новички спрашивают что почитать- а я и не помню что есть из книг 

 

Всем доброго времени суток!

Из поля ввода в окне советника необходимо получить таймфрейм, выбранный пользователем из выпадающего списка. Как его вставить в функцию, уж второй день кряду мучаюсь, подскажите пожалуйста))!

Код:

input enum timeFrame {
    Hour_1 = 60,
    Hour_4 = 240,
    Day_1 = 1440,
    Week_1 = 10080

   };


iADX(currencySelect, ВОТ СЮДА НАДО ВСТАВИТЬ ВЫБРАННЫЕ ДАННЫЕ!, ADXparam, PRICE_CLOSE, MODE_MINUSDI,2)


спасибо!

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

Правильно вставляем код на форуме

Вот пример скрипта, с применением Вашего перечисления:

//+------------------------------------------------------------------+
//|                                                       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:

Правильно вставляем код на форуме

Вот пример скрипта, с применением Вашего перечисления:

Спасибо!

И еще, подскажите, пожалуйста, есть ли в MQ4 конструкция наподобие ассоциативного массива с текстовыми ключами, например: Array["Зесь ключ!"]?

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

Спасибо!

И еще, подскажите, пожалуйста, есть ли в MQ4 конструкция наподобие ассоциативного массива с текстовыми ключами, например: Array["Зесь ключ!"]?

//+------------------------------------------------------------------+
//|                                                         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:
В вашем примере ключи - это числа, а я имел ввиду использование строк в качестве ключа.
 
Сергей Михеев:
В вашем примере ключи - это числа, а я имел ввиду использование строк в качестве ключа.
Обращение к элементам массива происходит по индексу. Индекс - это  целый тип int.
 

Здравствуйте!

Подскажите, пожалуйста как в коде советника MQL Получить информацию по открытым и уже закрытым сделкам(по какой цене открылось, какие были ТП и СЛ)? хотя бы по 1 последней.

И есть ли какая-нибудь встроенная функция или библиотека, которая вернет массив с n последними значениями скользящей средней(лучше взвешенной или экспоненциальной)?  

 
Alex317:

Здравствуйте!

Подскажите, пожалуйста как в коде советника MQL Получить информацию по открытым и уже закрытым сделкам(по какой цене открылось, какие были ТП и СЛ)? хотя бы по 1 последней.

И есть ли какая-нибудь встроенная функция или библиотека, которая вернет массив с n последними значениями скользящей средней(лучше взвешенной или экспоненциальной)?  

Пожалуйста, всегда уточняйте для какой версии MQL4 или MQL5 Ваш вопрос.
Причина обращения: