Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2504

 

Спасибо всем кто помог, вы лучшие!

Получилась что-то сделать, поигрался.

Буду изучать  OnTradeTransaction() , разбиратся как работает.

А вот и совместные труды )

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;
//---
double TP = 50; //  PROFIT
double SL = 50; //  LOSS
//---
int OnInit() {return(INIT_SUCCEEDED);}
//---
void OnDeinit(const int reason) {}
//---
ulong tickett = 0;
bool flagg = false;
double PosPriceOpen = 0;
ulong spread = 0;
//---
void OnTick()
  {
   if(PositionsTotal() == 0)
     {
      trade.Buy(1, NULL);
      tickett = PositionGetTicket(0);
      flagg = true;
     }
   if(flagg == true)
     {
      //--- Spread
      spread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);

      //--- количество знаков после запятой
      int    digits = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);

      //--- значение пункта
      double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

      //Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету
      PositionSelectByTicket(tickett);

      //Функция возвращает запрошенное свойство открытой позиции - Цена открытия
      PosPriceOpen = PositionGetDouble(POSITION_PRICE_OPEN);

      //--- вычислим и нормализуем уровни SL и TP
      double SLos = NormalizeDouble(PosPriceOpen - (SL + spread) * point, digits);
      double TPro = NormalizeDouble(PosPriceOpen + (TP + spread) * point, digits);

      //--- все готово, делаем попытку модифицировать позицию на покупку
      trade.PositionModify(tickett, SLos, TPro);
      flagg = false;
      //---
      Print("Price_Open = ", PosPriceOpen, "\n", "Ticket = ", tickett, "\n", "Spread = ", spread);
     }
//---
   spread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);
   Comment("\n", "Price_Open = ", PosPriceOpen, "\n", "Ticket = ", tickett, "\n", "Spread = ", spread);
  }
//+------------------------------------------------------------------+
 
Alexey Viktorov #:

Только надо взять trade.ResultPrice();

И в функции OnTradeTransaction() тоже можно получить эту цену. 

1. Логично!

2. Не получится сделать за один проход в OnTick, открыть позицию, получить её цену и сразу модифицировать стопы и тейки.

Получить цену в  OnTradeTransaction получится только после выхода из  OnTick. 

 
Maxim121285 #:

Спасибо всем кто помог, вы лучшие!

Получилась что-то сделать, поигрался.

Буду изучать  OnTradeTransaction() , разбиратся как работает.

А вот и совместные труды )

А это зачем

PositionSelectByTicket(tickett);

В текущей реализации это масло масляное после того как выбрали позицию с помощью

PositionGetTicket(0);
 
Aleksandr Slavskii #:

А это зачем

В текущей реализации это масло масляное после того как выбрали позицию с помощью

Проверил и без    PositionSelectByTicket(tickett); работает.

Буду разбиратся сейчас с  OnTradeTransaction().

 

Как строку из mql4 перевести в mql5 ?

datetime LTF_Time_0                        = Time[0];

- - - 

Нашел такое решение - все верно или это в МТ5 решается иначе (довольно муторно по сравнению с МТ4)?
   datetime arr_time[];
   if(CopyTime(Symbol(),PERIOD_CURRENT,0,1,arr_time)==-1) {
      return(-1);
   }
   datetime LTF_Time_0 = arr_time[0];
 

Привет всем!

Подскажите в чем может быть проблема или что я делаю не так.

Не показывает текущую цену и ASK.

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\SymbolInfo.mqh>
#include <Trade\Trade.mqh>
CSymbolInfo symb;
CTrade trade;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
// Получает наименование финансового инструмента.
   string symbyl_name = symb.Name();

//--- Устанавливает наименование финансового инструмента -
//--- для дальнейшей работы с ним.
   symb.Name(symbyl_name);

//--- Получает текущую цену Ask
   double ask = symb.Ask();

//--- Получает текущую цену Last.
   double last = symb.Last();
//---
   Print("Имя = ", symb.Name()); 
   Print("Ask = ", ask);
   Print("Цена = ", last);
  }
//+------------------------------------------------------------------+
/* РЕЗУЛЬТАТ
2024.12.27 20:54:35.593 a (GBPJPY,M1)   Имя = GBPJPY
2024.12.27 20:54:35.593 a (GBPJPY,M1)   Ask = 0.0
2024.12.27 20:54:35.593 a (GBPJPY,M1)   Цена = 0.0
*/
 
grezky #:

Как строку из mql4 перевести в mql5 ?


- - - 

Нашел такое решение - все верно или это в МТ5 решается иначе (довольно муторно по сравнению с МТ4)?
datetime LTF_Time_0 = iTime(_Symbol,_Period,0);
 
Maxim121285 #:

Привет всем!

Подскажите в чем может быть проблема или что я делаю не так.

Не показывает текущую цену и ASK.

void OnStart()
{
  symb.Name(Symbol());

  symb.RefreshRates();
//--- Получает текущую цену Ask

  double ask = symb.Ask();

//--- Получает текущую цену Last.
  double last = symb.Last();
//---
  Print("Имя = ", symb.Name());
  Print("Ask = ", ask);
  Print("Цена = ", last);
}
 
Vitaly Muzichenko #:

Спасибо что помогаете! )

RefreshRates();  пробовал,

ASK показывает,

а вот Last(); нет.

Это может быть связано с тем что у меня демо счет?

 
Maxim121285 #:

Спасибо что помогаете! )

RefreshRates();  пробовал,

ASK показывает,

а вот Last(); нет.

Это может быть связано с тем что у меня демо счет?

На Forex нет Last