Ответить
29.03.2015, 14:25
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
OnTimer() должен срабатывать если торговля закрыта или нет?

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

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

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

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

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

Последний раз редактировалось _SERG_; 29.03.2015 в 14:30.
29.03.2015, 15:22
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
OnTimer() должен срабатывать если торговля закрыта или нет?

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

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

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

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

Сталкивались с тем, что алгоритм в тестере работает без ошибок, а на счете вообще не работает? В тестере пересечения по всем инструментам в журнал пишет. А на счете молчит ни в журнал ни на почту, а я жду от него писем с сигналами, думал нет еще пересечений, смотрю так по 3-м парам фунту, йене и евро. А сегодня случайно тестил по сегодняшний день и в тесте каждый день по 3 сигнала по всяким парам и акциям. По информации с журнала тестера все сигналы на своих инструментах-графиках фактически есть, а терминал на VPS молчал все эти дни.
OnTimer() работает непрерывно, как зацикленный, независимо от того открыта ли торговля. Но она не работает в тестере. И как показывает практика, не на всех виртуальных машинах работает. А если работает, глючит при малейшей нехватке ресурсов.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
29.03.2015, 15:57
Аватар для owjedi
owjedi owjedi вне форума Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
А ты в инит 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("Сработал таймер на выполнение алгоритма"); не увидел. А в тестере все как по маслу. Хоть бери каждое утро тестер запускай и по нему сделки вручную открывай.

За совет скритптец написать спасибо наверно так только и можно проверить.
29.03.2015, 16:02
Аватар для owjedi
owjedi owjedi вне форума Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
OnTimer() работает непрерывно, как зацикленный, независимо от того открыта ли торговля. Но она не работает в тестере. И как показывает практика, не на всех виртуальных машинах работает. А если работает, глючит при малейшей нехватке ресурсов.
Виртуальная машина, стесняюсь спросить, это что за объект?
29.03.2015, 16:08
Аватар для Sobolh
Sobolh Sobolh вне форума Интересующийся
Регистрация: 22.03.2015 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних 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.
29.03.2015, 16:29
Аватар для owjedi
owjedi owjedi вне форума Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних 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.
29.03.2015, 16:33
Аватар для gince
gince gince на форуме Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 448
Поблагодарили 810 раз(а) / Репутация: 810
  • Отправить сообщение для gince с помощью Skype™
Помогите с индюком.
Ошибка 2015.03.29 09:33:32.000 array out of range in 'gi_BB ELR.mq4' (94,14)

Если дальше будут ошибки, я сам разберусь, а с этой помогите.
Гинтарас

Последний раз редактировалось gince; 29.03.2015 в 16:37.
29.03.2015, 17:47
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
Помогите с индюком.
Ошибка 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.
29.03.2015, 18:04
Аватар для Sobolh
Sobolh Sobolh вне форума Интересующийся
Регистрация: 22.03.2015 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Код iLow("USDCHF",PERIOD_H1,0) немного не подходит. Нужно учитывать время [i] -(последние 30 баров). [i] не могу воткнуть в этот код...
29.03.2015, 20:23
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Виртуальная машина, стесняюсь спросить, это что за объект?
Это то чем виртуалят виртуальные серверы. Ресурсы одного реального сервера делят на кучу виртуальных. Например Hyper-V
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
29.03.2015, 20:31
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Помогите пожалуйста!
Как сделать, чтоб функция по поиску минимальных и максимальных значений цены среди последних 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.
Sobolh 
30.03.2015, 01:14
Аватар для ViMax
ViMax ViMax вне форума Интересующийся
Регистрация: 21.03.2015 / Сообщений: 4
Поблагодарили 0 раз(а) / Репутация: 1
Магик обычно проверяется при закрытии ордеров или подсчете профита или суммарного лота - т.е. в функциях каких-то при наличии уже открытых ордеров. Магик для разных счетов может быть одинаковый - он и нужен для того, чтобы на одном счете и одном инструменте торгов различать ордера от разных сов или по направлению торгов (разделение по бай и селл) или и то и другое. Вот к примеру простая функция закрытия всех ордеров с заданным магиком.
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, будет для разных счетов, разный.
30.03.2015, 04:36
Аватар для owjedi
owjedi owjedi вне форума Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Код iLow("USDCHF",PERIOD_H1,0) немного не подходит. Нужно учитывать время [i] -(последние 30 баров). [i] не могу воткнуть в этот код...
iLow("USDCHF",PERIOD_H1,0) здесь 0 это выбор бара по которому вам нужно значение, заместо него надо поставить переменную, если опрос надо проводить циклически, в Вашем случае i.
Sobolh 
30.03.2015, 07:28
Аватар для vetpolik
vetpolik vetpolik вне форума Интересующийся
Регистрация: 30.03.2015 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
Добрый день. Подскажите пожалуйста новичку как выставить Stop Losse?
Прочитал кучу литературы: пишут, что SL можно поставить так:
StopLosse = Bid-30*Point
но у меня ошибка 130. Пробовал другой способ - высчитать StopLosse:
StopLosse = MarketInfo(Symbol(),MODE_STOPLEVEL))
но эта операция мне возвращает 100 - то есть минимум стоп лос я могу поставить 100 пунктов - а мне нужно 30.

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

Спасибо.
30.03.2015, 11:41
Аватар для owjedi
owjedi owjedi вне форума Интересующийся
Регистрация: 23.03.2015 / Сообщений: 11
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Добрый день. Подскажите пожалуйста новичку как выставить 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.
30.03.2015, 11:56
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Добрый день. Подскажите пожалуйста новичку как выставить Stop Losse?
_http://forum.mql4.com/ru/38949#434191
30.03.2015, 12:53
Аватар для Sobolh
Sobolh Sobolh вне форума Интересующийся
Регистрация: 22.03.2015 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 1
Может кто подскажет - как можно найти максимальное значение из 5 глобальных переменных типа - ( double A,B,C,D,E ) ?
30.03.2015, 13:43
Аватар для vetpolik
vetpolik vetpolik вне форума Интересующийся
Регистрация: 30.03.2015 / Сообщений: 3
Поблагодарили 0 раз(а) / Репутация: 1
К сожалению я так ответ и не нашел. Как мне поставить стоплос 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. Не пойму в чем причина.
30.03.2015, 13:45
Аватар для matro3
matro3 matro3 на форуме Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Загоняй в массив и - _http://docs.mql4.com/ru/array/arraymaximum

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

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


Опции темы

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

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



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


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