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

 

Доброго времени, господа хорошие!)

Пытаюсь подготовить данные для обучения нейронной сети. Задача -

Имеется матрица, где например каждая строка(момент времени - бар) это входной вектор, а столбцов например 10000 . Как быть если имеются данные которые динамические(количество -строк1, строк2), и меняются по количеству в разные моменты времени.

Например, матрица загружена в сеть, каждая строка - вектор для обучения, но для каждой строки есть еще n-ое количество строк динамически изменяющихся во времени.

Возможный домысел решения - это добавить в матрицу дополнительные столбцы равно количеству  столбцов в строке динамического, выйдет что к каждому вектору добавится столбцы из денамического, но как бы одной строки, просто проссумированные.

например

1-ый вектор

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "строка1 динамического" 1 1 1 1 1

ссссссссссссссссссссссссссссссссссссссс "строка2 динамического" 1 1 1 1 1

решение

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "строка1 динамического" 2 2 2 2 2 

 
Top2n:

Доброго времени, господа хорошие!)

Пытаюсь подготовить данные для обучения нейронной сети. Задача -

Имеется матрица, где например каждая строка(момент времени - бар) это входной вектор, а столбцов например 10000 . Как быть если имеются данные которые динамические(количество -строк1, строк2), и меняются по количеству в разные моменты времени.

Например, матрица загружена в сеть, каждая строка - вектор для обучения, но для каждой строки есть еще n-ое количество строк динамически изменяющихся во времени.

Возможный домысел решения - это добавить в матрицу дополнительные столбцы равно количеству  столбцов в строке динамического, выйдет что к каждому вектору добавится столбцы из денамического, но как бы одной строки, просто проссумированные.

например

1-ый вектор

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "строка1 динамического" 1 1 1 1 1

ссссссссссссссссссссссссссссссссссссссс "строка2 динамического" 1 1 1 1 1

решение

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "строка1 динамического" 2 2 2 2 2 

А как изучить язык, у которого динамически (раз в час, скажем) меняется словарь? Вот и нейросетью так.
 
Так там MQL5, как я понял. Или идентично?
 
Andrey Sokolov:
Так там MQL5, как я понял. Или идентично?
Абсолютно одинаково.
 
Добрый день. Я создал советник, работает хорошо, но если я выключу терминал с работающим советником и опять включу терминал, то советник начинает все считать по-новому. Так вот, у меня вопрос. Что нужно прописать в советнике, что бы он при старте сбрасывал Входные параметры?
 
XFaost:
Добрый день. Я создал советник, работает хорошо, но если я выключу терминал с работающим советником и опять включу терминал, то советник начинает все считать по-новому. Так вот, у меня вопрос. Что нужно прописать в советнике, что бы он при старте сбрасывал Входные параметры?
Надо чтобы советник не сбрасывал входные параметры, а собирал информацию о тех ордерах которые были открыты перед выключением.
 
XFaost:
Добрый день. Я создал советник, работает хорошо, но если я выключу терминал с работающим советником и опять включу терминал, то советник начинает все считать по-новому. Так вот, у меня вопрос. Что нужно прописать в советнике, что бы он при старте сбрасывал Входные параметры?
Опишите, пожалуйста, принцип работы советника. Возможно, нужно использовать другой принцип. А если все-таки нужно сбрасывать, то сначала нужно определиться, что значит "при старте". А в целом сброс - это переход в начальное положение. Пропишите начальные настройки и в нужный момент установите их.
 

Приветствую. Подскажите, что не так? 

Советник выставляет ордера со стопами выше и ниже цены. В случае срабатывания одного из них  стоп корректируется в случае если цена удаляется от стопа больше чем задано, в случае если цена движется к стопу то без изменений.

Написал сначала только с ордером на покупку, все работает как надо. Дописал, зеркально, на продажу  - стопы стали корректироваться на заданную величину при любом движении цены.

В общем, если по отдельности, или на покупку, или на продажу  - работает как надо, а обе части вместе - вылезает такой баг. 

 

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}


 

 
Andrey Sokolov:

Приветствую. Подскажите, что не так? 

Советник выставляет ордера со стопами выше и ниже цены. В случае срабатывания одного из них  стоп корректируется в случае если цена удаляется от стопа больше чем задано, в случае если цена движется к стопу то без изменений.

Написал сначала только с ордером на покупку, все работает как надо. Дописал, зеркально, на продажу  - стопы стали корректироваться на заданную величину при любом движении цены.

В общем, если по отдельности, или на покупку, или на продажу  - работает как надо, а обе части вместе - вылезает такой баг. 

...

Баг, надо понимать - весь показанный вами код? По крайней мере, функция OnTick почти сплошной баг...

 
Vitalie Postolache:

Баг, надо понимать - весь показанный код?

Когда  есть обе части кода, и на покупку и на продажу, то после срабатывания отложенного ордера его стоп почему-то корректируется при любом направлении движении цены. А когда есть часть кода только на покупку или на продажу то стоп корректируется как и задумано, только при удалении от него цены.
Причина обращения: