[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 203
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну для начала скобки привыкни вставлять там где нужно. Типа того:
Здравствуйте!Подскажите пожалуйста команду (если таковая есть), случайного выбора числа либо 0 либо 1, заранее благодарен
При тестировании Эксперта выявились ошибки исполнения кода:
- исполнение оператора цикла for(i=0;i<OrdersTotal();i++) прерывается следующим тиком (ниже выделено шрифтом Bold),
- ордера buy выбираются и закрываются в произвольном порядке.
Подскажите, пожалуйста, как установить причину и устранить?
Код программы и отчёт из журнала тестера привожу.
Код программы.
//+------------------------------------------------------------------+
//| Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//|Тест оператора цикла. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//|Объявленные переменные |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----Установка ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Счётчик Tick
Tick++;//Tick
//----Закрываем ордера BUY
for(i=0;i<OrdersTotal();i++)//Инициализация цикла
{
Print("Кс1:"," Tick=",Tick," i=",i);//Сообщение
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
{
if(OrderSymbol()==Symbol())//Символ
{
if(OrderMagicNumber()==Mn)//Идентификационное число
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
}//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}//Закрыто if(OrderMagicNumber()==Mn)
}//Закрыто if(OrderSymbol()==Symbol()
}//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}//Закрыто for(i=0;i<OrdersTotal();i++)
//----
return(0);
}
Записи из журнала тестера.
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=4 i=0
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 at price 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 Poligon1 test started
2013.03.01 12:11:21 Poligon1 EURUSD,M15: loaded successfully
С уважением. Shurkin
При тестировании Эксперта выявились ошибки исполнения кода:
- исполнение оператора цикла for(i=0;i<OrdersTotal();i++) прерывается следующим тиком (ниже выделено шрифтом Bold),
- ордера buy выбираются и закрываются в произвольном порядке.
С уважением. Shurkin
1. Нельзя открывать ордера в функции init().(В тестере еще прокатит, но уже на демо работать не будет)
2. Когда закрываете ордера, считать надо с конца к началу, а не наоборот, как у Вас.
При тестировании Эксперта выявились ошибки исполнения кода:
- исполнение оператора цикла for(i=0;i<OrdersTotal();i++) прерывается следующим тиком (ниже выделено шрифтом Bold),
- ордера buy выбираются и закрываются в произвольном порядке.
Подскажите, пожалуйста, как установить причину и устранить?
Код программы и отчёт из журнала тестера привожу.
Код программы.
//+------------------------------------------------------------------+
//| Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//|Тест оператора цикла. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link ""
//+------------------------------------------------------------------+
//|Объявленные переменные |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----Установка ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----Счётчик Tick
Tick++;//Tick
//----Закрываем ордера BUY
for(i=0;i<OrdersTotal();i++)//Инициализация цикла
{
Print("Кс1:"," Tick=",Tick," i=",i);//Сообщение
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
{
if(OrderSymbol()==Symbol())//Символ
{
if(OrderMagicNumber()==Mn)//Идентификационное число
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
}//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}//Закрыто if(OrderMagicNumber()==Mn)
}//Закрыто if(OrderSymbol()==Symbol()
}//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
}//Закрыто for(i=0;i<OrdersTotal();i++)
//----
return(0);
}
Записи из журнала тестера.
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=4 i=0
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 at price 1.25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 at price 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Кс0: OrdersTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 Poligon1 test started
2013.03.01 12:11:21 Poligon1 EURUSD,M15: loaded successfully
С уважением. Shurkin
int x =MathRand() % 2;
А с чего бы то вдруг будет возвращаться 0 или 1, а не другое число? Ведь согласно справке функция MathRand() возвращает псевдослучайное целое число в дипазоне от 0 до 32767
А с чего бы то вдруг будет возвращаться 0 или 1, а не другое число? Ведь согласно справке функция MathRand() возвращает псевдослучайное целое число в дипазоне от 0 до 32767
Это остаток от деления! Смотри в арифметических действиях и в своём принте!
Вставь и увидишь только два результата попеременно:
Приветствую всех! Подскажите, пожалуйста, как угомонить советник, при наступелении условий входа в рынок, он начинает писать в лог файл "Сработал приказ!" и делает это в минуту раз несколько десятков, в результате чего лог-файл становится космически огромным. Как сделать что бы писал только один раз, а не до закрытия позы, ведь она может провисеть и несколько часов...