Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos
Сообщений: 177
•
1 ... 5, 6, 7, 8, 9, 10, 11 ... 18
Re: Вопросы по программированию в МТ4
Рэндом » 03 окт 2016, 12:36
MagistrSanich писал(а):Рэндом писал(а):Надо писать о баге в службу поддержки Метаквотес.
Но у тебя же тоже OrderTicket ноль возвращает, я так понял мой код у тебя точно так же работает
Да, так же.
-

Рэндом
- Специалист MQL
-
- Сообщений: 13700
- Зарегистрирован: 18 июл 2013, 08:05
- Средств на руках: 31.45

- Группа: Администраторы
- Благодарил (а): 1131 раз.
- Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.
Вопросы по программированию в МТ4
mfcoder » 03 окт 2016, 20:42
Рэндом писал(а):for(int i=0;i<(OrdersTotal()+1);i++)
это что за бред с +1 ?
я уже год ничего не писал, и может чего-то уже сурово изменилось с тех пор..
-

mfcoder
-
- Сообщений: 1531
- Зарегистрирован: 29 июл 2013, 11:55
- Средств на руках: 26.85

- Группа: Базовая
- Благодарил (а): 78 раз.
- Поблагодарили: 423 раз.
Вопросы по программированию в МТ4
Kalkin » 03 окт 2016, 21:58
В коде есть одна недопустимая логическая ошибка. В цикле перебора и модификации ордеров после вызова OrderSelect(...) идет обращение к функции counter(...), которая в свою очередь также содержит перебор ордеров и вызов OrderSelect(...). Получается, что при попытке модификации для функции OrderModify() передается тикет и цена открытия не очередного ордера, как задумывалось, а совсем другого, на котором заканчивает работу функция counter(). Код надо переписывать.
mfcoder писал(а):Рэндом писал(а):for(int i=0;i<(OrdersTotal()+1);i++)
это что за бред с +1 ?
я уже год ничего не писал, и может чего-то уже сурово изменилось с тех пор..
Да, и +1 в counter(), конечно же, надо убрать.
-

Kalkin
-
- Сообщений: 1589
- Зарегистрирован: 05 мар 2015, 06:51
- Средств на руках: 108.80

- Награды: 2
-
- Группа: Базовая
- Благодарил (а): 633 раз.
- Поблагодарили: 1190 раз.
Ace Register Votive
Re: Вопросы по программированию в МТ4
Рэндом » 04 окт 2016, 04:07
Да, вызов ордер селект в каунт может все нарушить.
-

Рэндом
- Специалист MQL
-
- Сообщений: 13700
- Зарегистрирован: 18 июл 2013, 08:05
- Средств на руках: 31.45

- Группа: Администраторы
- Благодарил (а): 1131 раз.
- Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.
Re: Вопросы по программированию в МТ4
Рэндом » 04 окт 2016, 05:40
Вот рабочий вариант. Но в логике советника есть ошибки.
- Код: выделить все
#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=10;
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());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+TakeProfit*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,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 раз.
Каждый заблуждается в меру своих возможностей.
Re: Вопросы по программированию в МТ4
Haos » 04 окт 2016, 08:05
Правильному стилю программирования нужно учиться. Тогда и ошибок не будет. У нас на форуме уже достаточно статей обучающих.
-

Haos
- Специалист MQL
-
- Сообщений: 24699
- Зарегистрирован: 29 мар 2014, 16:07
- Средств на руках: 193.70

- Группа: Главные модераторы
- Благодарил (а): 3379 раз.
- Поблагодарили: 8200 раз.
Вопросы по программированию в МТ4
MagistrSanich » 04 окт 2016, 09:30
Поставил фигурные скобки и все получилось, большое спасибо, рандому, что помог и Калкину тоже
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{...Тут OrderModify и прочее.}
-

MagistrSanich
-
- Сообщений: 10
- Зарегистрирован: 29 сен 2016, 16:04
- Средств на руках: 5.00

- Группа: Новые пользователи
- Благодарил (а): 3 раз.
- Поблагодарили: 1 раз.
Re: Вопросы по программированию в МТ4
Рэндом » 04 окт 2016, 09:35
Пожалуйста.
-

Рэндом
- Специалист MQL
-
- Сообщений: 13700
- Зарегистрирован: 18 июл 2013, 08:05
- Средств на руках: 31.45

- Группа: Администраторы
- Благодарил (а): 1131 раз.
- Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.
Вопросы по программированию в МТ4
Alexandeer » 04 ноя 2016, 05:23
Здравствуйте, я не так давно начал программировать на MQL4 и я не смог найти решения для пары проблем:
1) Когда пишешь
input int StopLoss = 150;
То соответственно, когда пользователь хочет сам задать значение советнику, то ему отображается на английском "StopLoss".
Вопрос: как сделать на русском?
2) Когда тестишь советники открывается по умолчанию окно визуализации, со следующими настройками:
сетка, не красивые одноцветные бары. Короче как задать настройки для графика таким образом, что бы каждый раз при открытии графика они сохранялись?
Уверен, что на такие вопросы уже тысячу раз отвечено, но я честно не смог найти, я на форме искал и гуглил.
-

Alexandeer
-
- Сообщений: 17
- Зарегистрирован: 04 ноя 2016, 04:54
- Средств на руках: 8.00

- Группа: Новые пользователи
- Благодарил (а): 18 раз.
- Поблагодарили: 0 раз.
Re: Вопросы по программированию в МТ4
Рэндом » 04 ноя 2016, 05:30
input int StopLoss = 150;//Стоп лосс
Для того чтобы отображалось русское название надо просто добавить комментарий.
Второе. Настраиваете график. Кликнуть правой кнопкой мыши на графике. Далее шаблоны, сохранить шаблон. Потом в разделе шаблоны его можно выбрать.
-

Рэндом
- Специалист MQL
-
- Сообщений: 13700
- Зарегистрирован: 18 июл 2013, 08:05
- Средств на руках: 31.45

- Группа: Администраторы
- Благодарил (а): 1131 раз.
- Поблагодарили: 3174 раз.
Каждый заблуждается в меру своих возможностей.
Кто сейчас на форуме?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35
Права доступа к форуму
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения