Вопросы по программированию в МТ4

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 01 окт 2016, 07:58

Да, пожалуй действительно не так просто.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение MagistrSanich » 02 окт 2016, 15:48

Рэндом писал(а):В коде не вижу ошибок. Надо смотреть какие у вас в терминале уровни стопов и не меньше трал их.

Вот весь OnTick
, почему OrderModify возвращает false до сих пор понять не могу
void OnTick()
{
int a=0;int Trall=50;//Trall - это TP и SL а не тралл
double tpB=NormalizeDouble((Trall*_Point+Ask),_Digits);
double tpS=NormalizeDouble((Bid-Trall*_Point),_Digits);
//ОТКРЫВАЕМ ОРДЕРА ЕСЛИ ИХ НЕТ
if (Flag==true)
if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,tpS,tpB,"",Magic,0,clrBlue)>0)//Устанавливается TakeProfit и StopLoss, который работает правильно
Flag=false;
if (counter(OP_SELL)==0)
OrderSend(_Symbol,OP_SELL,Lots,Bid,Slip,tpB,tpS,"",Magic,0,clrRed);

tpB*=8;
tpS*=8;bool mod=true;
for (int i=0;i<OrdersTotal();i++)//Цикл перебораа ордеров
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if (OrderMagicNumber()==Magic)
if (a==0)
{
a=0;
if (OrderType()==OP_BUY)//Модификация BUY
mod=OrderModify(OrderTicket(),OrderOpenPrice(),tpS,tpB,0,clrGreen); //Возвращаяет FALSE
if (OrderType()==OP_SELL)//Модификация SELL
OrderModify(OrderTicket(),OrderOpenPrice(),tpB,tpS,0,clrGreen);

}
}
if (counter(OP_BUY)==0) Flag=true;//Функция подсчета ордеров
Comment("mod= ",mod,"\nBUY: ",counter(OP_BUY),"\nSELL: ",counter(OP_SELL),"\n");
}
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 03 окт 2016, 05:50

Робот работает на пятизнаке? Если да, попробуйте трал 500.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 03 окт 2016, 05:56

tpB*=8;
tpS*=8;
Вот здесь ошибка. Этот код надо убрать. У вас цена для стопа и тейка получается умноженная на 8. Например цена 1.2, а что будет если ее умножить на 8?
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение MagistrSanich » 03 окт 2016, 08:53

Рэндом писал(а):tpB*=8;
tpS*=8;
Вот здесь ошибка. Этот код надо убрать. У вас цена для стопа и тейка получается умноженная на 8. Например цена 1.2, а что будет если ее умножить на 8?

Да ошибка была, но без нее все равно не работает, я уже и местами менял все что можно, вот другой код, запустите его у себя, может у меня терминал или еще что-то не работает или я забыл прописать активацию чего либо. Вот код
int mod=-18;
void OnTick()
{
if(counter(OP_BUY)==0) mod=-199;
if(counter(OP_BUY)==0)//counter()-функция которая считает ордера
OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,0,Ask+60*_Point,"",Magic,0,clrBlue);//Устанавливается TakeProfit и StopLoss, который работает правильно
if(counter(OP_SELL)==5)
OrderSend(_Symbol,OP_SELL,Lots,Bid,Slip,0,0,"",Magic,0,clrRed);

int Namber=500;//Namber - это TP и SL
double tpB=NormalizeDouble((Namber*_Point+Ask),_Digits);
double tpS=NormalizeDouble((Bid-Namber*_Point),_Digits);

for(int i=0;i<OrdersTotal();i++)//Цикл перебораа ордеров
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
if(counter(OP_BUY)==1 || counter(OP_SELL)==1)
{
if(OrderType()==OP_BUY && counter(OP_BUY)==1)//Модификация BUY
mod=OrderModify(OrderTicket(),OrderOpenPrice(),tpS,tpB,0,clrGreen);
//После выполнения функции присваивает 1 если получилось и 0 если нет
if(OrderType()==OP_SELL && counter(OP_SELL)==1)//Модификация SELL
OrderModify(OrderTicket(),OrderOpenPrice(),tpB,tpS,0,clrGreen);
}
}

Comment("mod= ",mod,"\nBUY: ",counter(OP_BUY),"\nSELL: ",counter(OP_SELL));

} Мод возвращает 0 все время что бы я ни делал
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 03 окт 2016, 09:51

Выложите весь код.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение MagistrSanich » 03 окт 2016, 10:42

Рэндом писал(а):Выложите весь код.

#property copyright "MagistrSanich"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

input double Lots=0.01;
input int Slip=30;
input int Magic=0;
input int TakeProfit=300;
input int StopLoss=300;

int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int counter(int type)// ФУНЦИЯ ПОДСЧЕТА ОРДЕРА, РАБОТАЕТ ПРАВИЛЬНО
{
int n=0;
for(int i=0;i<(OrdersTotal()+1);i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
if(OrderType()==type)
n++;
return n;
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
int mod=-18;
void OnTick()
{
if(counter(OP_BUY)==0) mod=-199;
if(counter(OP_BUY)==0)//counter()-функция которая считает ордера
OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,0,Ask+60*_Point,"",Magic,0,clrBlue);//Устанавливается TakeProfit и StopLoss, который работает правильно
if(counter(OP_SELL)==5)
OrderSend(_Symbol,OP_SELL,Lots,Bid,Slip,0,0,"",Magic,0,clrRed);

int Namber=500;//Namber - это TP и SL
double tpB=NormalizeDouble((Namber*_Point+Ask),_Digits);
double tpS=NormalizeDouble((Bid-Namber*_Point),_Digits);

for(int i=0;i<OrdersTotal();i++)//Цикл перебораа ордеров
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
if(counter(OP_BUY)==1 || counter(OP_SELL)==1)
{
if(OrderType()==OP_BUY && counter(OP_BUY)==1)//Модификация BUY
mod=OrderModify(OrderTicket(),OrderOpenPrice(),tpS,tpB,0,clrGreen);
//После выполнения функции присваивает 1 если получилось и 0 если нет
if(OrderType()==OP_SELL && counter(OP_SELL)==1)//Модификация SELL
OrderModify(OrderTicket(),OrderOpenPrice(),tpB,tpS,0,clrGreen);
}
}

Comment("mod= ",mod,"\nBUY: ",counter(OP_BUY),"\nSELL: ",counter(OP_SELL));

}
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 03 окт 2016, 10:46

Посмотрю что к чему.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Re: Вопросы по программированию в МТ4

Сообщение Рэндом » 03 окт 2016, 11:01

Не могу понять где ошибка. Хотя в тестере выдает ошибку для модификации неверные параметры функции. Никогда не сталкивался с такой ошибкой. Давайте вы опишите здесь что вы хотите сделать и вместе напишем код. Структура у вашего кода не очень. И не понятно зачем в трале менять тэйк профит. Чтобы увидеть ошибки надо прогнать код в тестере.
Аватар пользователя
Рэндом
Специалист MQL
 
Сообщений: 13700
Зарегистрирован: 18 июл 2013, 08:05
Средств на руках: 31.45 Доллар
Группа: Администраторы
Благодарил (а): 1131 раз.
Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.

Вопросы по программированию в МТ4

Сообщение Svarog » 03 окт 2016, 11:11

Смотрю на параметры и все соответствует описанию в справке.
Аватар пользователя
Svarog
 
Сообщений: 743
Зарегистрирован: 18 фев 2014, 11:37
Средств на руках: 227.58 Доллар
Награды: 1
Ветеран II (1)
Группа: Базовая
Благодарил (а): 17 раз.
Поблагодарили: 26 раз.
Привет мир!!!


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения