Ответ
 
Опции темы
Старый 29.03.2015, 14:25   #3701 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от owjedi Посмотреть сообщение
OnTimer() должен срабатывать если торговля закрыта или нет?

Я тоже сегодня в него поместил:

void OnTimer()
{
Print("Сработал таймер на выполнение алгоритма");

А сообщения в журнале не вижу.

Он разве по природе своей не циклически работает?

Сталкивались с тем, что алгоритм в тестере работает без ошибок, а на счете вообще не работает? В тестере пересечения по всем инструментам в журнал пишет. А на счете молчит ни в журнал ни на почту, а я жду от него писем с сигналами, думал нет еще пересечений, смотрю так по 3-м парам фунту, йене и евро. А сегодня случайно тестил по сегодняшний день и в тесте каждый день по 3 сигнала по всяким парам и акциям. По информации с журнала тестера все сигналы на своих инструментах-графиках фактически есть, а терминал на VPS молчал все эти дни.
А ты в инит EventSetTimer(5);, а в деинит EventKillTimer(); добавь.
Что касается пресечений, тех, которые ты видишь, то это ещё не факт, что это пересечение.
Как это выглядит в численном виде? Скриптец напиши с выводом значений индикатора и увидишь, есть пересечение или нет. Например - касание, когда значение одного индикатора численно (нормализованно) равны значеню другого. У тебя равны? или другое условие?

Последний раз редактировалось _SERG_; 29.03.2015 в 14:30.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 15:22   #3702 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от owjedi Посмотреть сообщение
OnTimer() должен срабатывать если торговля закрыта или нет?

Я тоже сегодня в него поместил:

void OnTimer()
{
Print("Сработал таймер на выполнение алгоритма");

А сообщения в журнале не вижу.

Он разве по природе своей не циклически работает?

Сталкивались с тем, что алгоритм в тестере работает без ошибок, а на счете вообще не работает? В тестере пересечения по всем инструментам в журнал пишет. А на счете молчит ни в журнал ни на почту, а я жду от него писем с сигналами, думал нет еще пересечений, смотрю так по 3-м парам фунту, йене и евро. А сегодня случайно тестил по сегодняшний день и в тесте каждый день по 3 сигнала по всяким парам и акциям. По информации с журнала тестера все сигналы на своих инструментах-графиках фактически есть, а терминал на VPS молчал все эти дни.
OnTimer() работает непрерывно, как зацикленный, независимо от того открыта ли торговля. Но она не работает в тестере. И как показывает практика, не на всех виртуальных машинах работает. А если работает, глючит при малейшей нехватке ресурсов.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 15:57   #3703 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от _SERG_ Посмотреть сообщение
А ты в инит EventSetTimer(5);, а в деинит EventKillTimer(); добавь.
Что касается пресечений, тех, которые ты видишь, то это ещё не факт, что это пересечение.
Как это выглядит в численном виде? Скриптец напиши с выводом значений индикатора и увидишь, есть пересечение или нет. Например - касание, когда значение одного индикатора численно (нормализованно) равны значеню другого. У тебя равны? или другое условие?
Выглядит так что пересечение явное и визуально и численно, только тестер его видит, а реал не видит. Тики же одни и те же или нет.
По вот такому алгоритму (извиняюсь, если нет желания его читать):
int start()
{

int _symbolsTotal = SymbolsTotal(false); // true – только символы в MarketWatch
int i;
for (i=0;i<_symbolsTotal;i++)
{
string _symbolName = SymbolName(i,false); // номер в списке / true – только символы в MarketWatch

if (Volume[0]>1) return(0);

double CH1=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_CHINKOUSPAN,_barCH1);
double CH2=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_CHINKOUSPAN,_barCH2);

double TK1=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_TENKANSEN,_barTK1);
double TK2=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_TENKANSEN,_barTK2);

double KJ1=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_KIJUNSEN,_barKJ1);
double KJ2=iIchimoku(_symbolName,0,tenkan_sen,kijun_sen,s enkou_span_b,MODE_KIJUNSEN,_barKJ2);

double price1=iMA(_symbolName,0,1,0,MODE_LWMA,PRICE_WEIGH TED,_barprice1);
double price2=iMA(_symbolName,0,1,0,MODE_LWMA,PRICE_WEIGH TED,_barprice2);

string messagemail;

if(KJ1>TK1&&TK2>KJ2) //сигнал золотой крест
if((CH1>price1&&CH2<price2)||(CH1<price1&&CH2>pric e2)) //подтверждение чикоу спан
{
messagemail = _symbolName+": "+signal1;
Print(_symbolName," ",signal1);
SendMail(messagemail,messagemail);
}
if(KJ1<TK1&&TK2<KJ2) //сигнал мертвый крест
if((CH1>price1&&CH2<price2)||(CH1<price1&&CH2>pric e2)) //подтверждение чикоу спан
{
messagemail = _symbolName+": "+signal2;
Print(_symbolName," ",signal2);
SendMail(messagemail,messagemail);
}
}

Тестер мне дает:

2 16:57:17.920 Signals TK&KJ onTick разработка 2 inputs: tenkan_sen=8; kijun_sen=22; senkou_span_b=42; _barCH1=25; _barCH2=22; _barTK1=3; _barTK2=0; _barKJ1=3; _barKJ2=0; _barprice1=25; _barprice2=22; symbolList=0;
0 16:57:17 2014.01.01 20:00 Signals TK&KJ onTick разработка 2 EURUSD,Daily: Инициализация выполнена

18:37:56 2015.03.23 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: AUDNZD сигнал мертвый крест.
0 18:37:56 2015.03.23 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: NZDUSD сигнал золотой крест.
0 18:37:56 2015.03.23 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: SILVER сигнал золотой крест.
0 18:37:56 2015.03.23 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: USDHKD сигнал мертвый крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #PFE сигнал золотой крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: AUDJPY сигнал золотой крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: AUDUSD сигнал золотой крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: GBPCHF сигнал мертвый крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: NZDUSD сигнал золотой крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: SILVER сигнал золотой крест.
0 18:37:56 2015.03.24 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: USDMXN сигнал мертвый крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #BA сигнал золотой крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #PFE сигнал золотой крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: AUDUSD сигнал золотой крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: GBPCHF сигнал мертвый крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: GBPDKK сигнал мертвый крест.
0 18:37:56 2015.03.25 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: USDMXN сигнал мертвый крест.
0 18:37:56 2015.03.26 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #C сигнал мертвый крест.
0 18:37:57 2015.03.26 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #JPM сигнал мертвый крест.
0 18:37:57 2015.03.26 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: EURGBP сигнал золотой крест.
0 18:37:57 2015.03.26 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: GBPDKK сигнал мертвый крест.
0 18:37:57 2015.03.27 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #C сигнал мертвый крест.
0 18:37:57 2015.03.27 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #JPM сигнал мертвый крест.
0 18:37:57 2015.03.27 00:00 Signals TK&KJ разработка1 (1) (1) EURUSD,Daily: #MCD сигнал мертвый крест.
0 18:37:57.010 EURUSD,Daily: 21871 tick events (1321 bars, 22871 bar states) processed within 1125 ms (total time 1172 ms)

На реале за эти же дни на том же символе с теми же параметрами (правильные значения баров у меня впечатаны как значения по умолчанию) болты.

Сегодня перед опросом индикаторов доработал вот так:

extern int volTimer = 10;


string signal1 = "сигнал золотой крест.";
string signal2 = "сигнал мертвый крест.";
int f;
int i;
int mass_iBars[100];

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("Инициализация выполнена");
EventSetTimer(volTimer);

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Print("Кол-во сигналов: ",f);
Print("Кол-во символов: ",i);
EventKillTimer();

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTimer()

{
Print("Сработал таймер на выполнение алгоритма");
//---
int _symbolsTotal = SymbolsTotal(symbolList); // true – только символы в MarketWatch

for (i=0;i<_symbolsTotal;i++)
{
string _symbolName = SymbolName(i,symbolList); // номер в списке / true – только символы в MarketWatch

if (mass_iBars[i]==NULL) mass_iBars[i]=iBars(_symbolName,PERIOD_D1);

if (mass_iBars[i]<iBars(_symbolName,PERIOD_D1))
{
mass_iBars[i]=iBars(_symbolName,PERIOD_D1);

И на реальном счете надписи вот такой Print("Сработал таймер на выполнение алгоритма"); не увидел. А в тестере все как по маслу. Хоть бери каждое утро тестер запускай и по нему сделки вручную открывай.

За совет скритптец написать спасибо наверно так только и можно проверить.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 16:02   #3704 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от Ugar Посмотреть сообщение
OnTimer() работает непрерывно, как зацикленный, независимо от того открыта ли торговля. Но она не работает в тестере. И как показывает практика, не на всех виртуальных машинах работает. А если работает, глючит при малейшей нехватке ресурсов.
Виртуальная машина, стесняюсь спросить, это что за объект?
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 16:08   #3705 (permalink)
Интересующийся
 
Аватар для Sobolh
 
Регистрация: 22.03.2015
Сообщений: 5
Репутация: 1
Sobolh
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних n баров показывала значения для других символов,
а не только на котором запустилась.

//--------------------------------------------------------------------
extern int Quant_Bars=30; // Количество баров
//--------------------------------------------------------------------
int start()
{
int i;
double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная цена
for(i=0;i<=Quant_Bars-1;i++)
{
if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет мин
if (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
Alert("За последние ",Quant_Bars,
" баров Min= ",Minimum," Max= ",Maximum);
return(0);
}
//--------------------------------------------------------------------

Последний раз редактировалось Sobolh; 29.03.2015 в 16:39.
Sobolh вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 16:29   #3706 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от Sobolh Посмотреть сообщение
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних n баров показывала значения для других символов,
а не только на котором запустилась.
Все очень глубоко в данном вопросе, но начать надо с функций возврата значений Массивов тайм-серий заданного символа и таймфрейма. Все есть в встроенном справочнике mql4. iHigh, iLow, iOpen, iClose и т.д.
Например:
iLow

Возвращает значение минимальной цены бара (указанного параметром shift) соответствующего графика.

double iLow(
string symbol, // символ
int timeframe, // период
int shift // сдвиг
);


Параметры

symbol

[in] Символьное имя инструмента. NULL означает текущий символ.

timeframe

[in] Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

shift

[in] Индекс получаемого значения из таймсерии (сдвиг относительно текущего бара на указанное количество баров назад).

Возвращаемое значение

Значение минимальной цены бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().

Примечание

Для текущего графика информация о минимальных ценах баров находится в предопределенном массиве Low[].

Пример:

Print("Current bar for USDCHF H1: ",iTime("USDCHF",PERIOD_H1,0),", ", iOpen("USDCHF",PERIOD_H1,0),", ",
iHigh("USDCHF",PERIOD_H1,0),", ", iLow("USDCHF",PERIOD_H1,0),", ",
iClose("USDCHF",PERIOD_H1,0),", ", iVolume("USDCHF",PERIOD_H1,0));

Если значения торговых инструментов фиксированные то в принципе все просто, а если они должны сами изменятся по какому-либо закону, то все сложно.

Если по простому, то надо поменять функцию Low[] на примерно так iLow("USDCHF",PERIOD_H1,0) и т.д.
а если по сложному, то см. код из сообщений выше.

Последний раз редактировалось owjedi; 29.03.2015 в 16:33.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 16:33   #3707 (permalink)
Местный знаток
 
Аватар для gince
 
Регистрация: 09.09.2008
Адрес: Литва
Сообщений: 396
Репутация: 733
gince - gince - gince - gince - gince - gince - gince -
Сказал(а) спасибо: 178
Поблагодарили 733 раз(а) в 189 сообщениях
Поинты: 192
Отправить сообщение для gince с помощью Skype™
Помогите с индюком.
Ошибка 2015.03.29 09:33:32.000 array out of range in 'gi_BB ELR.mq4' (94,14)

Если дальше будут ошибки, я сам разберусь, а с этой помогите.
Вложения:
Тип файла: mq4 gi_BB ELR.mq4 (9.5 Кб, 10 просмотров)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас

Последний раз редактировалось gince; 29.03.2015 в 16:37.
gince вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 17:47   #3708 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 242
Репутация: 75
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 75 раз(а) в 61 сообщениях
Поинты: 284
Сообщение от gince Посмотреть сообщение
Помогите с индюком.
Ошибка 2015.03.29 09:33:32.000 array out of range in 'gi_BB ELR.mq4' (94,14)
Если дальше будут ошибки, я сам разберусь, а с этой помогите.
Нет значений размерности массивов .
double UpBB[];
double DnBB[];
double ELR[];
double UpIntBB[];
double DnIntBB[];
double UpArrowBB[];
double DnArrowBB[];

Куда Это потом толкать?
DnBB[i]= iBands(NULL,0,BB_Per,BB_deviation0,0,BB_Price0,MOD E_LOWER,i);
UpBB[i]= iBands(NULL,0,BB_Per,BB_deviation0,0,BB_Price0,MOD E_UPPER,i);


Последний раз редактировалось _SERG_; 29.03.2015 в 17:50.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 18:04   #3709 (permalink)
Интересующийся
 
Аватар для Sobolh
 
Регистрация: 22.03.2015
Сообщений: 5
Репутация: 1
Sobolh
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Код iLow("USDCHF",PERIOD_H1,0) немного не подходит. Нужно учитывать время [i] -(последние 30 баров). [i] не могу воткнуть в этот код...
Sobolh вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 20:23   #3710 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от owjedi Посмотреть сообщение
Виртуальная машина, стесняюсь спросить, это что за объект?
Это то чем виртуалят виртуальные серверы. Ресурсы одного реального сервера делят на кучу виртуальных. Например Hyper-V

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 29.03.2015, 20:31   #3711 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Sobolh Посмотреть сообщение
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних n баров показывала значения для других символов,
а не только на котором запустилась.

//--------------------------------------------------------------------
extern int Quant_Bars=30; // Количество баров
//--------------------------------------------------------------------
int start()
{
int i;
double Minimum=Bid, // Минимальная цена
Maximum=Bid; // Максимальная цена
for(i=0;i<=Quant_Bars-1;i++)
{
if (Low[i]< Minimum) // Если < известного
Minimum=Low[i]; // то оно и будет мин
if (High[i]> Maximum) // Если > известного
Maximum=High[i]; // то оно и будет макс
}
Alert("За последние ",Quant_Bars,
" баров Min= ",Minimum," Max= ",Maximum);
return(0);
}
//--------------------------------------------------------------------
И незачем такой огород городить.
Maximum=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Qua nt_Bars,0));
Minimum=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,Quant_ Bars,0));
По другим символам вместо всех NULL подсунуть имя символа.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 29.03.2015 в 20:35.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Sobolh (29.03.2015)
Старый 30.03.2015, 01:14   #3712 (permalink)
Интересующийся
 
Аватар для ViMax
 
Регистрация: 21.03.2015
Сообщений: 4
Репутация: 1
ViMax
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 8
Сообщение от vladradon Посмотреть сообщение
Магик обычно проверяется при закрытии ордеров или подсчете профита или суммарного лота - т.е. в функциях каких-то при наличии уже открытых ордеров. Магик для разных счетов может быть одинаковый - он и нужен для того, чтобы на одном счете и одном инструменте торгов различать ордера от разных сов или по направлению торгов (разделение по бай и селл) или и то и другое. Вот к примеру простая функция закрытия всех ордеров с заданным магиком.
void closeall()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
int x=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Magic)
{
if(OrderType()==OP_BUY) x=OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue) ;
if(OrderType()==OP_SELL) x=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
}
}
}
Возможно я не так выразился....
Мне нужно, что бы советник работал, после того как проверит, что MagicNumer во "входных параметрах" введен верно. А проверка происходит по типу:
if MagicNumber=AccountNumber*2-12345
Т.е. получается, что MagicNumber, будет для разных счетов, разный.
ViMax вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 04:36   #3713 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от Sobolh Посмотреть сообщение
Код iLow("USDCHF",PERIOD_H1,0) немного не подходит. Нужно учитывать время [i] -(последние 30 баров). [i] не могу воткнуть в этот код...
iLow("USDCHF",PERIOD_H1,0) здесь 0 это выбор бара по которому вам нужно значение, заместо него надо поставить переменную, если опрос надо проводить циклически, в Вашем случае i.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Sobolh (30.03.2015)
Старый 30.03.2015, 07:28   #3714 (permalink)
Интересующийся
 
Аватар для vetpolik
 
Регистрация: 30.03.2015
Сообщений: 3
Репутация: 1
vetpolik
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Добрый день. Подскажите пожалуйста новичку как выставить Stop Losse?
Прочитал кучу литературы: пишут, что SL можно поставить так:
StopLosse = Bid-30*Point
но у меня ошибка 130. Пробовал другой способ - высчитать StopLosse:
StopLosse = MarketInfo(Symbol(),MODE_STOPLEVEL))
но эта операция мне возвращает 100 - то есть минимум стоп лос я могу поставить 100 пунктов - а мне нужно 30.

Вопрос такой - почему вручную я могу поставить стоплос 30 при открытии ордера а в советнике не могу?
Если это невозможно, есть ли готовое решение (или подскажите логику) как сделать такой стоплос с помощью открытия лота в обратную сторону?

Спасибо.
vetpolik вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 11:41   #3715 (permalink)
Интересующийся
 
Аватар для owjedi
 
Регистрация: 23.03.2015
Сообщений: 11
Репутация: 2
owjedi
Сказал(а) спасибо: 4
Поблагодарили 1 раз в 1 сообщении
Поинты: 22
Сообщение от vetpolik Посмотреть сообщение
Добрый день. Подскажите пожалуйста новичку как выставить Stop Losse?
Прочитал кучу литературы: пишут, что SL можно поставить так:
StopLosse = Bid-30*Point
но у меня ошибка 130. Пробовал другой способ - высчитать StopLosse:
StopLosse = MarketInfo(Symbol(),MODE_STOPLEVEL))
но эта операция мне возвращает 100 - то есть минимум стоп лос я могу поставить 100 пунктов - а мне нужно 30.

Вопрос такой - почему вручную я могу поставить стоплос 30 при открытии ордера а в советнике не могу?
Если это невозможно, есть ли готовое решение (или подскажите логику) как сделать такой стоплос с помощью открытия лота в обратную сторону?


Спасибо.
Для покупки:
extern int _takeProfit = 100;
extern int _stopLoss = 100;
_sl=NormalizeDouble(Bid-_stopLoss*Point,Digits);
_tp=NormalizeDouble(Bid+_takeProfit*Point,Digits);
Для продажи заменить - на + и + на -.
Функция MarketInfo (Symbol(),MODE_STOPLEVEL))
Возвращает минимально допустимый уровень стоп-лосса/тейк-профита в пунктах. Читайте справочник mql4 в редакторе mql4.
Она нужна если вы упорно хотите поставить лося меньше разрешенного.
Если у Вас 5 знаков после запятой для EURUSD, то вы пытаетесь поставить не 30, а 3 в классическом понимании.
Наверное можно так:
для Buy
_sl=NormalizeDouble(Bid-(MarketInfo (Symbol(),MODE_STOPLEVEL)+_stopLoss)*Point,Digits) ;
для Sell
_sl=NormalizeDouble(Bid+(MarketInfo (Symbol(),MODE_STOPLEVEL)+_stopLoss)*Point,Digits) ;

Вы как раз вовремя с вопросом, сам только что подумал как себе сделать и открыл форум чтобы почитать, а тут Вы.

Кстати в функциях создания и управления ордерами лоси и профиты устанавливаются не в пунктах, а в абсолюном своем значении.

Последний раз редактировалось owjedi; 30.03.2015 в 11:49.
owjedi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 11:56   #3716 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от vetpolik Посмотреть сообщение
Добрый день. Подскажите пожалуйста новичку как выставить Stop Losse?
_http://forum.mql4.com/ru/38949#434191
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 12:53   #3717 (permalink)
Интересующийся
 
Аватар для Sobolh
 
Регистрация: 22.03.2015
Сообщений: 5
Репутация: 1
Sobolh
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Может кто подскажет - как можно найти максимальное значение из 5 глобальных переменных типа - ( double A,B,C,D,E ) ?
Sobolh вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 13:43   #3718 (permalink)
Интересующийся
 
Аватар для vetpolik
 
Регистрация: 30.03.2015
Сообщений: 3
Репутация: 1
vetpolik
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
К сожалению я так ответ и не нашел. Как мне поставить стоплос 30 пунктов?
StopLose = 30;
SL = NormalizeDouble(Bid-(MarketInfo(Symbol(),MODE_STOPLEVEL)+StopLose)*Poi nt,Digits);
Print("LotPrice = "+Ask+", StopLosse = "+SL+", StopLevel = "+MarketInfo(Symbol(),MODE_STOPLEVEL));

USDCHF,H1: LotPrice = 0.95068, StopLosse = 0.94858, StopLevel = 100

У меня StopLevel всегда возвращает 100. Это в режиме тестирования. Я не могу поставить лот со стоплосом 30, и после открытия лота со стоплосом 0 не могу его изменить на 30. Не пойму в чем причина.
vetpolik вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 13:45   #3719 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Загоняй в массив и - _http://docs.mql4.com/ru/array/arraymaximum

Последний раз редактировалось NSerega; 30.03.2015 в 14:32.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.03.2015, 14:16   #3720 (permalink)
Интересующийся
 
Аватар для vetpolik
 
Регистрация: 30.03.2015
Сообщений: 3
Репутация: 1
vetpolik
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 6
Наконец-то докопался до истины. Оказывается MarketInfo (Symbol(),MODE_STOPLEVEL)) напрямую зависит от вашего брокера. У меня все время возвращалось значение 100 (и из-за этого я не мог поставить стоплос 30) потому, что я открыл терминал и сделал себе демосчет какого-то непонятного брокера. А когда скачал терминал с сайта своего брокера, там автоматом демо счета создаются через него. Создав новый демо счет, мне MarketInfo (Symbol(),MODE_STOPLEVEL)) вернуло значение 2.
vetpolik вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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