Ответ
 
Опции темы
Старый 19.10.2016, 18:01   #5081 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,250
Репутация: 1961
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 346
Поблагодарили 1,890 раз(а) в 1,067 сообщениях
Поинты: 1266
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Семен12345 Посмотреть сообщение
а если использовать время компьютера?
Если код советника находится в OnTick(), то он выполняется с приходом тика по текущему символу. То есть если нет тиков в начале свечи, то и код советника не будет выполняться.
Если код в OnTimer(), то он выполняется с периодичностью запрограммированной в таймере, независимо от того есть тик или нет.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2016, 05:59   #5082 (permalink)
Местный житель
 
Аватар для Cemen4yk1
 
Регистрация: 18.09.2014
Сообщений: 222
Репутация: 245
Cemen4yk1 - Cemen4yk1 - Cemen4yk1 -
Сказал(а) спасибо: 35
Поблагодарили 244 раз(а) в 101 сообщениях
Поинты: 205
Сообщение от Ugar Посмотреть сообщение
Если код советника находится в OnTick(), то он выполняется с приходом тика по текущему символу. То есть если нет тиков в начале свечи, то и код советника не будет выполняться.
Если код в OnTimer(), то он выполняется с периодичностью запрограммированной в таймере, независимо от того есть тик или нет.
Он таймер лучше использовать в связке с Онтиком, если тиков нет то сервер может послать нас по любому запросу с пометкой офквот, для этого рекомедуется проверять время прихода последнего тика

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

https://www.mql5.com/ru/market/product/17748
Cemen4yk1 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2016, 07:10   #5083 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Cemen4yk1 Посмотреть сообщение
Он таймер лучше использовать в связке с Онтиком, если тиков нет то сервер может послать нас по любому запросу с пометкой офквот, для этого рекомедуется проверять время прихода последнего тика
Согласен - проверено на обоих языках - без тиков не работает... Я рекомендую запускать основной код в цикле типа while с использованием кнопки стоп, которая тормознет цикл - это работает и обрабатывает все графики с минимальной задержкой - насколько комп позволяет.
vladradon вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2016, 18:06   #5084 (permalink)
Новичок форума
 
Аватар для RV_aka_rvn
 
Регистрация: 20.05.2016
Сообщений: 85
Репутация: 13
RV_aka_rvn
Сказал(а) спасибо: 2
Поблагодарили 12 раз(а) в 9 сообщениях
Поинты: 80
Вопрос знатокам, как распознать "цвет свечи" на нулевом баре (программно естественно, а не визуально)?
RV_aka_rvn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 26.10.2016, 19:54   #5085 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,647
Репутация: 8540
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,536 раз(а) в 1,561 сообщениях
Поинты: 800
Сообщение от RV_aka_rvn Посмотреть сообщение
Вопрос знатокам, как распознать "цвет свечи" на нулевом баре (программно естественно, а не визуально)?
Что больше: Open или Close. (текущая цена у свечи, что формируется равна Close).
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
RV_aka_rvn (27.10.2016)
Старый 27.10.2016, 08:03   #5086 (permalink)
Новичок форума
 
Аватар для RV_aka_rvn
 
Регистрация: 20.05.2016
Сообщений: 85
Репутация: 13
RV_aka_rvn
Сказал(а) спасибо: 2
Поблагодарили 12 раз(а) в 9 сообщениях
Поинты: 80
Сообщение от mobidik Посмотреть сообщение
Что больше: Open или Close. (текущая цена у свечи, что формируется равна Close).
Спасибо за пояснения это естественно, а с доджами, меня они больше интересуют, как, "кресты" бывают и "зелёные" и "красные"....
RV_aka_rvn вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2016, 09:10   #5087 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,647
Репутация: 8540
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,536 раз(а) в 1,561 сообщениях
Поинты: 800
Сообщение от RV_aka_rvn Посмотреть сообщение
Спасибо за пояснения это естественно, а с доджами, меня они больше интересуют, как, "кресты" бывают и "зелёные" и "красные"....
А у доджа есть цвет?
Open = Close
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2016, 09:40   #5088 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от mobidik Посмотреть сообщение
А у доджа есть цвет?
Open = Close
Есть.
Миниатюры:
Нажмите на изображение для увеличения
Название: 00.png
Просмотров: 17
Размер:	38.5 Кб
ID:	257006  
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 27.10.2016, 09:45   #5089 (permalink)
 
Аватар для mobidik
 
Регистрация: 09.08.2012
Адрес: Ua_Khm
Сообщений: 1,647
Репутация: 8540
mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik mobidik
Сказал(а) спасибо: 633
Поблагодарили 8,536 раз(а) в 1,561 сообщениях
Поинты: 800
Сообщение от AlexeyVik Посмотреть сообщение
Есть.
ну конечно есть... иначе был бы невидимкой, это суслика может быть не видно.
mobidik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
AlexeyVik (27.10.2016)
Старый 28.10.2016, 15:42   #5090 (permalink)
Новичок форума
 
Аватар для seronn
 
Регистрация: 26.02.2014
Сообщений: 49
Репутация: 17
seronn
Сказал(а) спасибо: 16
Поблагодарили 16 раз(а) в 8 сообщениях
Поинты: 56
Уважаемые программисты! Подскажите, как заставить советник закрыться именно на той же свече, где он был открыт?
Объясняю. Предположим, я догадываюсь куда относительно цены открытия ордера двинется свеча текущего таймфрейма, ордер на свече в нужном месте выставил. Нужно закрыть ордер по цене закрытия свечи, т.е. по цене iClose, т.к. движение на следующей свече неизвестно. Принципиально закрытие именно на текущей свече, а не на открытии новой(понимаю, цена та же, но это важно) Как это реализовать в советнике?

Последний раз редактировалось seronn; 28.10.2016 в 15:45.
seronn на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 28.10.2016, 15:53   #5091 (permalink)
Программиров
 
Аватар для expforex
 
Регистрация: 11.01.2009
Сообщений: 2,134
Репутация: 2146
expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex
Сказал(а) спасибо: 136
Поблагодарили 2,088 раз(а) в 733 сообщениях
Поинты: 267
Сообщение от seronn Посмотреть сообщение
Уважаемые программисты! Подскажите, как заставить советник закрыться именно на той же свече, где он был открыт?
Объясняю. Предположим, я догадываюсь куда относительно цены открытия ордера двинется свеча текущего таймфрейма, ордер на свече в нужном месте выставил. Нужно закрыть ордер по цене закрытия свечи, т.е. по цене iClose, т.к. движение на следующей свече неизвестно. Принципиально закрытие именно на текущей свече, а не на открытии новой(понимаю, цена та же, но это важно) Как это реализовать в советнике?
ловить закрытие на текущем баре Вы не сможете, потому что даже если смотреть пару секунд до закрытия свечи - может не быть тика,
соответственно нужно ловить закрытие на следующем тике следующего бара
потому что цена закрытия предыдущего бара = 99% цене открытия следующего бара

поэтому можно так:
sy= символ
op = тип операции (бай селл)
mn = Магик

Скрытый текст

void CurentBarClose(string sy="0",int op=-1,int mn=-1)
{
datetime t;
int i,k=OrdersTotal();

if(sy=="" || sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
t=OrderOpenTime();
if(iBarShift(sy,0,t,True)==1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE);
}
}
}
}
}
}

}
[свернуть]


где вызов функции можно делать так:
CurentBarClose(Symbol(),-1,-1);

а что же 1 % = это гепы.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо

Последний раз редактировалось expforex; 28.10.2016 в 15:55.
expforex вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
seronn (28.10.2016)
Старый 28.10.2016, 19:27   #5092 (permalink)
Новичок форума
 
Аватар для Rennela
 
Регистрация: 04.01.2013
Адрес: 俄罗斯
Сообщений: 102
Репутация: 24
Rennela
Сказал(а) спасибо: 27
Поблагодарили 23 раз(а) в 17 сообщениях
Поинты: 81
Сегодня у меня советник сбился. Поменял таймфрейм с M30 на H1 появилась запись в логах MQL(потом прочитал) :uninit reason 3, после этого он выставил неправильный лот и слил часть прибыли. Вопрос: эта запись uninit reason 3 нормальна при смене таймфрейма и может она быть причиной слива, или просто советник коряво написан?(хотя по другим парам работал нормально и код не сбивался-на таймфреймы не переходил). Подскажите кто в курсе.
Rennela на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 28.10.2016, 19:46   #5093 (permalink)
Программиров
 
Аватар для expforex
 
Регистрация: 11.01.2009
Сообщений: 2,134
Репутация: 2146
expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex expforex
Сказал(а) спасибо: 136
Поблагодарили 2,088 раз(а) в 733 сообщениях
Поинты: 267
Сообщение от Rennela Посмотреть сообщение
Сегодня у меня советник сбился. Поменял таймфрейм с M30 на H1 появилась запись в логах MQL(потом прочитал) :uninit reason 3, после этого он выставил неправильный лот и слил часть прибыли. Вопрос: эта запись uninit reason 3 нормальна при смене таймфрейма и может она быть причиной слива, или просто советник коряво написан?(хотя по другим парам работал нормально и код не сбивался-на таймфреймы не переходил). Подскажите кто в курсе.
uninit reason 3 - в переводе - причина деинициализции, тоесть говорится о том что был сменен тф - а советник открыл неправильный лот потому что в нем какой то глюк. ТФ здесь не при чем и uninit reason 3 тоже

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Советники на заказ! admin@expforex.com
Говорим Спасибо
expforex вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Rennela (28.10.2016)
Старый 29.10.2016, 01:12   #5094 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 241
Репутация: 74
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 74 раз(а) в 60 сообщениях
Поинты: 282
Сообщение от expforex Посмотреть сообщение
ловить закрытие на текущем баре Вы не сможете, потому что даже если смотреть пару секунд до закрытия свечи - может не быть тика,
соответственно нужно ловить закрытие на следующем тике следующего бара
потому что цена закрытия предыдущего бара = 99% цене открытия следующего бара

поэтому можно так:
sy= символ
op = тип операции (бай селл)
mn = Магик

Скрытый текст

void CurentBarClose(string sy="0",int op=-1,int mn=-1)
{
datetime t;
int i,k=OrdersTotal();

if(sy=="" || sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
t=OrderOpenTime();
if(iBarShift(sy,0,t,True)==1)OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,clrNONE);
}
}
}
}
}
}

}
[свернуть]


где вызов функции можно делать так:
CurentBarClose(Symbol(),-1,-1);

а что же 1 % = это гепы.
Зачем так сложно?
Если доступен исходник, дописать секцию OnTick(),
и если наступила 59-я секунда закрыть, чЁ там хотелось.
Про начало интервала, по вкусу писателя, как от там планирует исчисляться.
Если не доступен исходняк,
написать сову, код в OnTick() которой, по неким признакам, кроет
всё на той же 59-й секунде.
Ну, и прицепить ее к счёту отдельно.
Деттак.

Последний раз редактировалось _SERG_; 29.10.2016 в 01:16.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2016, 06:06   #5095 (permalink)
Прохожий
 
Аватар для Volkodrak
 
Регистрация: 29.10.2016
Сообщений: 1
Репутация: 1
Volkodrak
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Доброго времени суток, господа программисты!

Прошу не судить строго, я еще не спец в программировании. Только учусь. Написал индюка. Но проблема в том, что он не обновляется. То есть новые свечи появляются, а индюк их не обрабатывает. Надо сменить таймфрейм или переключиться между инструментами, тогда индикатор дорисуется. Подскажите, в чем может быть проблема? И еще одна непонятка. Если хочу поменять местами инструменты или перевернуть индикатор (например использую Inst_1_1 = 1/Inst_1_1), то на некоторых таймфреймах перестает отрисовываться средняя на индикаторе (везде отрисовывается, а на H4 и D1 - нет). Может кто то подскажет что это может быть? :/ Вроде ерунда, две строчки кода эта средняя, но никак не могу понять что с ней не так :/

Вот код:

int OnCalculate (const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{

int i,limit;
limit = rates_total - prev_calculated;
if(prev_calculated > 0)
limit++;

for(i = 0; i < limit; i++)
{
double Inst_1_1 = iClose(Instrument_1_1, 0, i);
if(Inst_Per_1_1 == true) Inst_1_1 = 1/Inst_1_1;

double Inst_1_2 = iClose(Instrument_1_2, 0, i);
if(Inst_Per_1_2 == true) Inst_1_2 = 1/Inst_1_2;

Korel_Buffer[ i ]=Inst_1_1 / Inst_1_2;

if(Buffers == 2)
{
double Inst_2_1 = iClose(Instrument_2_1, 0, i);
if(Inst_Per_2_1 == true) Inst_2_1 = 1/Inst_2_1;

double Inst_2_2 = iClose(Instrument_2_2, 0, i);
if(Inst_Per_2_2 == true) Inst_2_2 = 1/Inst_2_2;

Korel_Buffer2[ i ]=(Inst_2_1 / Inst_2_2) + Podnyat_Graf;
}
}

if(Ris_Srednyaya == true)
{
for(i = 0; i < limit; i++)
{
int j = 0;
double Summa = 0;

for(j = 0; j < Max_Sred; j++)
{
Summa = Summa + Korel_Buffer[i+j];
}
Srednyaya[ i ] = Summa/j;
}
}
return(rates_total);
}
Volkodrak вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2016, 06:36   #5096 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от _SERG_ Посмотреть сообщение
Зачем так сложно?
Если доступен исходник, дописать секцию OnTick(),
и если наступила 59-я секунда закрыть, чЁ там хотелось.
Про начало интервала, по вкусу писателя, как от там планирует исчисляться.
Если не доступен исходняк,
написать сову, код в OnTick() которой, по неким признакам, кроет
всё на той же 59-й секунде.
Ну, и прицепить ее к счёту отдельно.
Деттак.
Влад и начал с объяснения почему так может не получиться, или получится не всегда... Довольно часто встречаются случаи когда последнюю секунду бара и даже 2, тик отсутствует и OnTick() не срабатывает.
Если уж и ловить последнюю секунду бара то в функции OnTimer()
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2016, 08:11   #5097 (permalink)
Новичок форума
 
Аватар для Rennela
 
Регистрация: 04.01.2013
Адрес: 俄罗斯
Сообщений: 102
Репутация: 24
Rennela
Сказал(а) спасибо: 27
Поблагодарили 23 раз(а) в 17 сообщениях
Поинты: 81
Просматриваю исходники советников для примера(учусь) и в половине случаев start начинается с void, другая с int -вопрос №1: так как правильно писать int start() или void start()? На этом форуме смотрел, на MQL4 форуме смотрел - у каждого свое мнение. Или просто писать int start- и хуже не будет. В скрипте я думаю можно и void, т.к. start там запускается один раз в начале, тогда вопрос №2:чем отличаются в скрипте void OnStart() и void start()? или второй вариант в скрипте не допустим?
Rennela на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2016, 08:17   #5098 (permalink)
Местный знаток
За призовое место в конкурсе 

 
Аватар для ansol
 
Регистрация: 22.04.2010
Сообщений: 2,007
Репутация: 824
ansol - ansol - ansol - ansol - ansol - ansol - ansol -
Сказал(а) спасибо: 236
Поблагодарили 838 раз(а) в 552 сообщениях
Поинты: 1302
Сообщение от Rennela Посмотреть сообщение
Просматриваю исходники советников для примера(учусь) и в половине случаев start начинается с void, другая с int -вопрос №1: так как правильно писать int start() или void start()? На этом форуме смотрел, на MQL4 форуме смотрел - у каждого свое мнение. Или просто писать int start- и хуже не будет. В скрипте я думаю можно и void, т.к. start там запускается один раз в начале, тогда вопрос №2:чем отличаются в скрипте void OnStart() и void start()? или второй вариант в скрипте не допустим?
Кнопка F1 сломалась?
start - в старых версиях использовалась. Пока еще поддерживается для совместимости, но пора бы уже на "правильный" вариант всё перетащить:
Цитата:
OnStart

Функция OnStart() является обработчиком события Start, которое автоматически генерируется только для запущенных на выполнение скриптов. Должна иметь тип void, параметров не имеет:



void OnStart();


Для функции OnStart() допустимо указывать тип возвращаемого значения int.
и
Цитата:
Start

Событие Start – это специальное событие для активизации скрипта после его загрузки. Это событие обрабатывается функцией OnStart. Событие Start экспертам и пользовательским индикаторам не посылается.
ansol на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Rennela (29.10.2016)
Старый 29.10.2016, 15:56   #5099 (permalink)
Активный участник
 
Аватар для zliden
 
Регистрация: 28.08.2011
Адрес: Эдем
Сообщений: 39
Репутация: 24
zliden
Сказал(а) спасибо: 21
Поблагодарили 23 раз(а) в 11 сообщениях
Поинты: 5
Приветствую!
Есть сова.
Торгует стоповыми отложками.
Как переделать, чтобы торговала рыночными?
zliden вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.10.2016, 16:23   #5100 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 241
Репутация: 74
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 74 раз(а) в 60 сообщениях
Поинты: 282
Сообщение от AlexeyVik Посмотреть сообщение
Влад и начал с объяснения почему так может не получиться, или получится не всегда... Довольно часто встречаются случаи когда последнюю секунду бара и даже 2, тик отсутствует и OnTick() не срабатывает.
Если уж и ловить последнюю секунду бара то в функции OnTimer()
Алексей, перечитай сообщение внимательно.

Цитата:
Сообщение от expforex ловить закрытие на текущем баре Вы не сможете, потому что даже если смотреть пару секунд до закрытия свечи - может не быть тика,
соответственно нужно ловить закрытие на следующем тике следующего бара
потому что цена закрытия предыдущего бара = 99% цене открытия следующего бара
Там ничего про OnTimer() не написано.
А то, что окончание одного временнОго интервала является началом следующего, таки я с этим тожэ согласен.
Можно не на 59 секунде закрывать, а на нулевой.
Я на время, здесь внимание акцентирую.

Последний раз редактировалось _SERG_; 29.10.2016 в 16:53.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
AlexeyVik (30.10.2016)
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 00:20. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO