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

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

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

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

Рэндом писал(а):Не могу понять где ошибка. Хотя в тестере выдает ошибку для модификации неверные параметры функции. Никогда не сталкивался с такой ошибкой. Давайте вы опишите здесь что вы хотите сделать и вместе напишем код. Структура у вашего кода не очень. И не понятно зачем в трале менять тэйк профит. Чтобы увидеть ошибки надо прогнать код в тестере.

Стратегия такова:если нет BUYордеров, то открывать их с тэйком, но потом менять тэйк с помощью функции, но SELL я отключил, по моему в этом коде он не на что не влияет, вот условие для его отключения if(counter(OP_SELL)==5)
То что в конечном итоге ошибка именно в OrderModify ясно ибо вот:if(counter(OP_BUY)==0) mod=-199; А выводит в комментариях mod=0.
Раньше вот эти строчки стояли перед открытием ордера и с OrderSend работало как надо:
int Namber=500;//Namber - это TP и SL
double tpB=NormalizeDouble((Namber*_Point+Ask),_Digits);
double tpS=NormalizeDouble((Bid-Namber*_Point),_Digits);
Но если эти переменные закинуть в OrderModify ничего не работает, даже если сделать OrderModify(OrderTicket(),OrderOpenPrice(),0,0,0,clrGreen);
тоже не заработает, с учетом что тэйк отличен от нуля
Короче я явно либо не так задаю функцию, либо не сделал какую-то активацию чего-то перед этим или не учел еще что-то так как очень неопытен, надеюсь у тебя получится разобраться в чем тут дело
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

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

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

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

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

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

Рэндом писал(а):Попробуйте поставить функцию Print в сомнительных местах и посмотрите в тестере. У меня эта функция выдает тикет 0. По моему он не может быть равен 0. Как это получается не могу понять. Возможно ошибка терминала.

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

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

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

Можно узнать. Прогнать в тестере и посмотреть журнал. OrderTicket() выдает 0.
Вот код с добавленным принт.
Код: выделить все
#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,0,"",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,MODE_TRADES)==true)
if(OrderMagicNumber()==Magic)
if(counter(OP_BUY)==1 || counter(OP_SELL)==1)
{
Print(tpS," ",tpB," ",OrderTicket());
if(OrderType()==OP_BUY && counter(OP_BUY)==1)//Модификация BUY
mod=OrderModify(OrderTicket(),Ask,tpS,tpB,0);
//После выполнения функции присваивает 1 если получилось и 0 если нет
if(OrderType()==OP_SELL && counter(OP_SELL)==1)//Модификация SELL
OrderModify(OrderTicket(),Bid,tpB,tpS,0);
}
}

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

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

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

Сообщение MagistrSanich » 03 окт 2016, 12:16

Рэндом писал(а):Попробуйте поставить функцию Print в сомнительных местах и посмотрите в тестере. У меня эта функция выдает тикет 0. По моему он не может быть равен 0. Как это получается не могу понять. Возможно ошибка терминала.

Я изменил и получилось так Print(tpS," ",tpB," ",OrderTicket(), " ",OrderOpenPrice()," ", Ask);
А журнал выдал: 1.09187 1.10217 0 0.0 1.09717
Следовательно OrderSelect не работает
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

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

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

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

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

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

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

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

Сообщение MagistrSanich » 03 окт 2016, 12:28

Рэндом писал(а):Очень на это похоже.

Но при этом OrderSelect вот тут if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) возвращает true хотя работу не выполняет. Ты можешь скинуть какой-нибудь простенький бот где тоже есть модификация и она работает? Еще я сделал
k=OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,0,0,"",Magic,0,clrBlue);
и
OrderModify(k,Ask,tpS,tpB,0); и разумеется все заработало
Аватар пользователя
MagistrSanich
 
Сообщений: 10
Зарегистрирован: 29 сен 2016, 16:04
Средств на руках: 5.00 Доллар
Группа: Новые пользователи
Благодарил (а): 3 раз.
Поблагодарили: 1 раз.

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

Сообщение MagistrSanich » 03 окт 2016, 12:30

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

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

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

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

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


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

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

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

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

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