Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 97
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброго времени, господа хорошие!)
Пытаюсь подготовить данные для обучения нейронной сети. Задача -
Имеется матрица, где например каждая строка(момент времени - бар) это входной вектор, а столбцов например 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
Доброго времени, господа хорошие!)
Пытаюсь подготовить данные для обучения нейронной сети. Задача -
Имеется матрица, где например каждая строка(момент времени - бар) это входной вектор, а столбцов например 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
https://www.mql5.com/ru/articles/159
Так там MQL5, как я понял. Или идентично?
Добрый день. Я создал советник, работает хорошо, но если я выключу терминал с работающим советником и опять включу терминал, то советник начинает все считать по-новому. Так вот, у меня вопрос. Что нужно прописать в советнике, что бы он при старте сбрасывал Входные параметры?
Добрый день. Я создал советник, работает хорошо, но если я выключу терминал с работающим советником и опять включу терминал, то советник начинает все считать по-новому. Так вот, у меня вопрос. Что нужно прописать в советнике, что бы он при старте сбрасывал Входные параметры?
Приветствую. Подскажите, что не так?
Советник выставляет ордера со стопами выше и ниже цены. В случае срабатывания одного из них стоп корректируется в случае если цена удаляется от стопа больше чем задано, в случае если цена движется к стопу то без изменений.
Написал сначала только с ордером на покупку, все работает как надо. Дописал, зеркально, на продажу - стопы стали корректироваться на заданную величину при любом движении цены.
В общем, если по отдельности, или на покупку, или на продажу - работает как надо, а обе части вместе - вылезает такой баг.
#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);}
Приветствую. Подскажите, что не так?
Советник выставляет ордера со стопами выше и ниже цены. В случае срабатывания одного из них стоп корректируется в случае если цена удаляется от стопа больше чем задано, в случае если цена движется к стопу то без изменений.
Написал сначала только с ордером на покупку, все работает как надо. Дописал, зеркально, на продажу - стопы стали корректироваться на заданную величину при любом движении цены.
В общем, если по отдельности, или на покупку, или на продажу - работает как надо, а обе части вместе - вылезает такой баг.
Баг, надо понимать - весь показанный вами код? По крайней мере, функция OnTick почти сплошной баг...
Баг, надо понимать - весь показанный код?