Light Style© by Fisana

Перейти к содержимому


Инвестиционные фонды NordFx: профессиональное управление и прозрачность


NordFX

Фотография

Создание Советника


  • Пожалуйста, авторизуйтесь, чтобы ответить
200 ответов в этой теме

#31 VAZHAF

VAZHAF

    прописался

  • Пользователи ST test (off)
  • PipPipPip
  • 79 сообщений

Опубликовано 14 Август 2008 - 12:51

Привет всем!
Вопрос по поводу MF_Pivot AXEL 0-3255.
Он показывает только сам Pivot (пунктиром). По коду расчёт Pivotа - общий для всех сессий, только выбирается HLC нужного промежутка времени. Добавил код для построения параллельных линий уровней R1, R2, R3 и S1, S2, S3. Получилась ерунда… На рисунке видно. Сейчас я в тупике. Может я пытаюсь сделать невозможное, раз авторы этого не сделали?
С уважением, ЛЮКС.
P.S. Это моё первое сообщение, прошу прощение, если что-то не корректно.

Размещенное изображение

Не изобретайте велосипед. Примеров готовых пивотов можно найти в MQL4 Code Base - Каталог советников, индикаторов, скриптов и библиотек кода
есть и простые, как в этом файле.

Вложенные файлы

  • Вложенный файл  Pivot.zip   1,36 КБ   303 Скачано


#32 ЛЮКС

ЛЮКС

    пробегал

  • Пользователи ST test (off)
  • Pip
  • 4 сообщений

Опубликовано 14 Август 2008 - 01:36

Привет всем!
Вопрос по поводу MF_Pivot AXEL 0-3255.
Он показывает только сам Pivot (пунктиром). По коду расчёт Pivotа - общий для всех сессий, только выбирается HLC нужного промежутка времени. Добавил код для построения параллельных линий уровней R1, R2, R3 и S1, S2, S3. Получилась ерунда… На рисунке видно. Сейчас я в тупике. Может я пытаюсь сделать невозможное, раз авторы этого не сделали?
С уважением, ЛЮКС.
P.S. Это моё первое сообщение, прошу прощение, если что-то не корректно.

Размещенное изображение

Не изобретайте велосипед. Примеров готовых пивотов можно найти в MQL4 Code Base - Каталог советников, индикаторов, скриптов и библиотек кода
есть и простые, как в этом файле.


Спасибо за отклик. Готовых пивотов действительно много, только они не меняют свои показания в течение дня в
отличие от MF_Pivot AXEL 0-3255. А те старые велосипеды уже наизобретал - иногда пользуюсь.

#33 docspectre

docspectre

    записался

  • Пользователи ST test (off)
  • PipPip
  • 26 сообщений

Опубликовано 28 Сентябрь 2008 - 05:27

Добрый день. Нужен простой советник который бы открывал позицию при пересечении 2 МА и закрывал позицию при при обратном пересечении с одновременным открытием противоположной позиции. Без стоп лоссов, ТР и доливок. Пытался найти в просторах нета ничего подобного не нашел. Пытаюсь сделать самостоятельно но он не работает. Может кто нибудь глянет и подскажет чего не так. Код прилагается.

//+------------------------------------------------------------------+
//| Mar.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+

extern double Lots = 0.1;

// Это переменные, которые будут
// отображаться во время
// соединения эксперта с графиком

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
double MA_Fast,MA_Low;
int total, ticket, cnt;
// Просто переменные для использования в программе

// присвоение переменным значений

MA_Fast=iMA( NULL, 0, 1, 0, MODE_SMA, PRICE_TYPICAL, 1); // быстрая МА
MA_Low=iMA( NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); // медленная МА


if(Bars<100)
{
Print("bars less than 100");
return(0);
}
// Это условие проверяет, есть ли в истории графиков более 100 свечей и если нет,
// выдает ошибку. Требуется для того, чтобы обратить ваше внимание на проблему
// недостатка информации



total=OrdersTotal();
if(total<1)
// Эта проверка нужна для того, чтобы не открывать сразу нескольких одинаковых позиций. Если ее не будет, то, скажем, если ваш эксперт срабатывает, когда стохастик находится в зоне перекупленности, то он будет совершать сделку на каждом тике, пока не истратит всю маржу.
// Поэтому, чтобы ограничить количество открываемых позиций, ставят данный
// ограничитель. Если он стоит, то советник не будет открывать более определенного
// количества позиций <х
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Еще один вспомогательный кусок кода. Если средств на счете недостаточно, он
// выдаст ошибку. Данный кусок полностью бесполезен, если советник работает
// в реальном времени, но очень полезен при тестинге на истории.

{
OrderSelect(OrdersHistoryTotal( )-1, SELECT_BY_POS, MODE_HISTORY);

// открытие длинной позиции
if(MA_Fast>MA_Low && OrderProfit()>=0)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots*1,Open[0],3,0,"покупка",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}

// открытие короткой позиции
if(MA_Fast<MA_Low && OrderProfit()>=0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots*1,Open[0],3,0,"продажа",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}

// Наконец, мы добрались до самого интересного. Вместо этих иксов, надо вставить
// условие, при котором происходит покупка.

// Этот блок нужен только для того, чтобы записать в журнале, все ли прошло гладко.
// Или, в противном случае, записать ошибку, из-за которой что-то не получилось.

// Теперь о выходе. Тут также ничего не изменилось, просто RRRRRRR - условие
// закрытия сделки по BUY, ZZZZZZZZ - по SELL
return(0);
}
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(MA_Fast<MA_Low)

{
OrderClose(OrderTicket(),OrderLots(),Open[0],5,Red);
return(0);
}

}

}
if(OrderType()==OP_SELL)
{
if(MA_Fast>MA_Low)

{
OrderClose(OrderTicket(),OrderLots(),Open[0],5,Red);
return(0);
}

}
}
}



return(0);
}


Он не открывает ни одной позиции.

Заранее спасибо

#34 docspectre

docspectre

    записался

  • Пользователи ST test (off)
  • PipPip
  • 26 сообщений

Опубликовано 28 Сентябрь 2008 - 05:31

Если меняю вот этот кусок
ticket=OrderSend(Symbol(),OP_BUY,Lots*1,Open[0],3,0,"покупка",16384,0,Green);
на вот этот
ticket=OrderSend(Symbol(),OP_BUY,Lots*1,"покупка",16384,0,Green);
То он открывает 1 позу по бай и не закрывает ее.

#35 Shu

Shu

    Option Trader

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 1 897 сообщений

Опубликовано 29 Сентябрь 2008 - 05:38

Добрый день. Нужен простой советник который бы открывал позицию при пересечении 2 МА и закрывал позицию при при обратном пересечении с одновременным открытием противоположной позиции. Без стоп лоссов, ТР и доливок. Пытался найти в просторах нета ничего подобного не нашел. Пытаюсь сделать самостоятельно но он не работает. Может кто нибудь глянет и подскажет чего не так. Код прилагается.

ой :rolleyes:

во-первых, повнимательнее проверьте параметры функции OrderSend().

во-вторых, помните, что покупки совершаются по цене Ask, а продажи по цене Bid.

в-третьих, обращайте внимание на журналы. обычно там отражаются ошибки советника (если они случаются) и даётся их расшифровка (номер). по номеру легко в хэлпе найти причину сего.

#36 docspectre

docspectre

    записался

  • Пользователи ST test (off)
  • PipPip
  • 26 сообщений

Опубликовано 29 Сентябрь 2008 - 11:57

во-первых, повнимательнее проверьте параметры функции OrderSend().

во-вторых, помните, что покупки совершаются по цене Ask, а продажи по цене Bid.

в-третьих, обращайте внимание на журналы. обычно там отражаются ошибки советника (если они случаются) и даётся их расшифровка (номер). по номеру легко в хэлпе найти причину сего.

Воспользовался Вашими советами и ... Помогло. Спасибо большое. А может еще подскажите как правильно написать открыться лотом равным ПОСЛЕДНЕМУ лоту. Это уже для другого советника Или где поискать можно. В хелпе не могу найти

#37 Shu

Shu

    Option Trader

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 1 897 сообщений

Опубликовано 30 Сентябрь 2008 - 02:22

[Воспользовался Вашими советами и ... Помогло. Спасибо большое. А может еще подскажите как правильно написать открыться лотом равным ПОСЛЕДНЕМУ лоту. Это уже для другого советника Или где поискать можно. В хелпе не могу найти

не. ве. рю. :biggrin:

изучайте инструмент :wink: история ордеров вам доступна. если проанализировать её, то можно найти с каким лотом открывался последний ордер. отсюда и пляшите!

#38 docspectre

docspectre

    записался

  • Пользователи ST test (off)
  • PipPip
  • 26 сообщений

Опубликовано 01 Октябрь 2008 - 10:58

изучайте инструмент :wink: история ордеров вам доступна. если проанализировать её, то можно найти с каким лотом открывался последний ордер. отсюда и пляшите!

Похоже меня не так поняли. мне нужно не найти последнюю сделку, а написать так чтобы последняя сделка при соблюдении определенных условий открывалась лотом равным предыдущему, а при несоблюдении открывалась первоначальным лотом.

#39 Shu

Shu

    Option Trader

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 1 897 сообщений

Опубликовано 01 Октябрь 2008 - 01:09

изучайте инструмент :wink: история ордеров вам доступна. если проанализировать её, то можно найти с каким лотом открывался последний ордер. отсюда и пляшите!

Похоже меня не так поняли. мне нужно не найти последнюю сделку, а написать так чтобы последняя сделка при соблюдении определенных условий открывалась лотом равным предыдущему, а при несоблюдении открывалась первоначальным лотом.

почему же не понял? "чтобы последняя сделка ... открывалась лотом равным предыдущему". вот. отыскиваем предыдущую сделку - и смотрим какой у неё лот.. первоначальный обычно в параметрах советника. ну и всё - смотрим условия всяческие ваши конкретные и делаем выбор..

#40 minus

minus

    пробегал

  • Пользователи
  • Pip
  • 1 сообщений

Опубликовано 28 Октябрь 2008 - 04:19

Здравсивуйте, в данный момент учу mql, сначала написал простенький советник на основе WPR, теперь пытаюсь прилепит к нему лок - не порлучается, вроде бы все делаю правильно, но советник не хочет работать как надо. Помогите реализовать советник. И объясните пожалуйста в чем моя ошибка. Основная ошибка мне кажется содержится в пятом блоке. Принцип работы таков: основной сигнал - это пробитие уровня -50, противоположную позицию (лок) открываем только в том случае, если до нынешнего сигнала,(начало отсчета прошлое пробитие wprом уровня -50) wpr не входил в одну из зон - >-20 или <-80. Раскрываяется лок соответственно и вхождением wpr в одну из этих зон и при этом закрываем соответсвующию позицию и соответсвующую оставляем.
Заранее благодарен.
Код:
//+------------------------------------------------------------------+
//|														  WPR.mq4 |
//|					  Copyright © 2008, aftar Minus			 . |
//|										http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Minus."
#property link	  "http://www.metaquotes.net"
//+------------------------------------------------------------------1a--
extern int Period_WPR=34;			 // период WPR
extern double Lots=0.1;			   // используемый лот
extern double Prots=0.01;			 // Процент свободных средств
//-------------------------------------------------------------------1b--
bool   Work=true;					 // Эксперт будет работать.
string Symb;						  // Название финанс. инструмента
//-------------------------------------------------------------------2---
int start()
  {
  int Total;							  //количество ордеров в окне
  int Tip=-1;							 // Тип выбран. ордера (B=0,S=1)
  int Ticket;							 // Номер ордера
  
  double Wpr_t;							   //текущее значение WPR
  double Lot;								// Колич. лотов в выбран.ордере
  double Lts;								// Колич. лотов в открыв.ордере
  double Min_Lot;							// Минимальное количество лотов
  double Step;							   // Шаг изменения размера лота
  double Free;							   // Текущие свободные средства
  double One_Lot;							// Стоимость одного лота
  double Price;							   // Цена выбранного ордера
  
  bool Ans=false;						// Ответ сервера после закрытия
  bool Cls_B=false;						// Критерий для закрытия  Buy
  bool Cls_S=false;						// Критерий для закрытия  Sell
  bool Opn_B=false;						// Критерий для открытия  Buy
  bool Opn_S=false;						// Критерий для открытия  Sell
   bool zone1=true;
   bool zone2=true;
  //--------------------------------------------------------------- 3 --
   // Предварит.обработка
if(Bars<Period_WPR)					   // Недостаточно баров
	 {
	  Alert("Недостаточно баров в окне. Эксперт не работает.");
	  return;								   // Выход из start()
	 }
   if(Work==false)							  // Критическая ошибка
	 {
	  Alert("Критическая ошибка. Эксперт не работает.");
	  return;								   // Выход из start()
	 }
//--------------------------------------------------------------- 4 --
   // Учёт ордеров
   Symb=Symbol();							   // Название фин.инстр.
   Total=0;									 // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)		  // Цикл перебора ордер
	 {
	  if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
		{									   // Анализ ордеров:
		 if (OrderSymbol()!=Symb)continue;	  // Не наш фин. инструм
		 if (OrderType()>1)					 // Попался отложенный
		   {
			Alert("Обнаружен отложенный ордер. Эксперт не работает.");
			return;							 // Выход из start()
		   }
		 Total++;							   // Счётчик рыночн. орд
		 if (Total>3)						   // Не более одного орд
		   {
			Alert("Несколько рыночных ордеров. Эксперт не работает.");
			return;							 // Выход из start()
		   }
		 Ticket=OrderTicket();				  // Номер выбранн. орд.
		 Tip=OrderType();					// Тип выбранного орд.
		 Price=OrderOpenPrice();			   // Цена выбранн. орд.
		 Lot=OrderLots();					// Количество лотов
		}
	 }
//--------------------------------------------------------------- 5 --
   // Торговые критерии
	int H=1000;				   // Колич.баров в расчётной истории
   int P=Period_WPR;			// Период расчётной МА

   double WPR=iCustom(NULL,0,"WPR",P,H,0,0,1);
 //-------------------------//  
  
  
   if (WPR>-50 && zone1==true)
	 {
	  Opn_B=true;												  
	  Cls_S=true;
	  zone1=false;
	  zone2=false;					
	 } 
	else
	{		
   if (WPR>-50 && zone1==false && zone2==false)  
	   { 
	   Opn_B=true;  
		 {
		  if (WPR>-20)
		   { 
		   zone1=true;
		   zone2=false;
		   Cls_S=true;
		   zone1=false;
		   }
		  else
			{
			if (WPR<-80)
			 {
			 zone2=true;
			 zone1=false;
			 Cls_B=true;
			 zone2=false;
			 } 
			}   
		  }
		 }
	   }
   if (WPR<-50 && zone2==true)
	 {
	  Opn_S=true;												  
	  Cls_B=true;
	  zone2=false;
	  zone1=false;					
	 } 
	else
	{		
   if (WPR<-50 && zone2==false && zone1==false)  
	   { Opn_S=true;  
		 {
		  if (WPR<-80)
		   { 
		   zone2=true;
		   zone1=false;
		   Cls_B=true;
		   zone2=false;
		   }
		  else
			{
			if (WPR>-20)
			 {
			 zone1=true;
			 zone2=false;
			 Cls_S=true;
			 zone1=false;
			 } 
			}   
		  }
		 }
	   } 
//--------------------------------------------------------------- 6 --
 // Закрытие ордеров
   while(true)								  // Цикл закрытия орд.
	 {
	  if (Tip==0 && Cls_B==true)				// Открыт ордер Buy..
		{									   //и есть критерий закр
		 RefreshRates();						// Обновление данных
		 Ans=OrderClose(Ticket,Lot,Bid,5);	  // Закрытие Buy
		 if (Ans==true)						 // Получилось :)
		   {
			Alert ("Закрыт ордер Buy ",Ticket);
			break;							  // Выход из цикла закр
		   }
		 if (Fun_Error(GetLastError())==1)	  // Обработка ошибок
			continue;						   // Повторная попытка
		 return;								// Выход из start()
		}

	  if (Tip==1 && Cls_S==true)				// Открыт ордер Sell..
		{									   // и есть критерий закр
		 RefreshRates();						// Обновление данных
		 Ans=OrderClose(Ticket,Lot,Ask,5);	  // Закрытие Sell
		 if (Ans==true)						 // Получилось :)
		   {
			Alert ("Закрыт ордер Sell ",Ticket);
			break;							  // Выход из цикла закр
		   }
		 if (Fun_Error(GetLastError())==1)	  // Обработка ошибок
			continue;						   // Повторная попытка
		 return;								// Выход из start()
		}
	  break;									// Выход из while
	 }
//--------------------------------------------------------------- 7 --
   // Стоимость ордеров
   RefreshRates();							  // Обновление данных
   Min_Lot=MarketInfo(Symb,MODE_MINLOT);		// Миним. колич. лотов 
   Free=AccountFreeMargin();				 // Свободн средства
   One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
   Step=MarketInfo(Symb,MODE_LOTSTEP);	   // Шаг изменен размера

   if (Lots>0)								// Если заданы лоты,то 
	  Lts=Lots;								// с ними и работаем 
   else										 // % свободных средств
	  Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытия

   if (Lts<Min_Lot) Lts=Min_Lot;			   // Не меньше минимальн
   if (Lts*One_Lot>Free)					  // Лот дороже свободн.
	 {
	  Alert(" Не хватает денег на ", Lts," лотов");
	  return;								   // Выход из start()
	 }
//--------------------------------------------------------------- 8 --
// Открытие ордеров
   while(true)								  // Цикл закрытия орд.
	 {
	  if (Total==0 && Opn_B==true)			  // Открытых орд. нет +
		{									   // критерий откр. Buy
		 RefreshRates();						// Обновление данных		 
		 Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,0,0);//Открытие Buy
		 if (Ticket>0)						// Получилось :)
		   {
		   zone1=true;
			Alert ("Открыт ордер Buy ",Ticket);
			return;							 // Выход из start()
		   }
		 if (Fun_Error(GetLastError())==1)	  // Обработка ошибок
			continue;						   // Повторная попытка
		 return;								// Выход из start()
		}
	  if (Total==0 && Opn_S==true)			  // Открытых орд. нет +
		{									   // критерий откр. Sell
		 RefreshRates();						// Обновление данных
		 Alert("Попытка открыть Sell. Ожидание ответа..");
		 Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,0,0);//Открытие Sel
		 if (Ticket>0)						// Получилось :)
		   {
		   zone1=true;
			Alert ("Открыт ордер Sell ",Ticket);
			return;							 // Выход из start()
		   }
		 if (Fun_Error(GetLastError())==1)	  // Обработка ошибок
			continue;						   // Повторная попытка
		 return;								// Выход из start()
		}
	  break;									// Выход из while
	 }
//--------------------------------------------------------------- 9 --
   return;									  // Выход из start()
  }
 
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error)						// Ф-ия обработ ошибок
  {
   switch(Error)
	 {										  // Преодолимые ошибки			
	  case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");
		 Sleep(3000);						   // Простое решение
		 return(1);							 // Выход из функции
	  case 135:Alert("Цена изменилась. Пробуем ещё раз..");
		 RefreshRates();						// Обновим данные
		 return(1);							 // Выход из функции
	  case 136:Alert("Нет цен. Ждём новый тик..");
		 while(RefreshRates()==false)		   // До нового тика
			Sleep(1);						   // Задержка в цикле
		 return(1);							 // Выход из функции
	  case 137:Alert("Брокер занят. Пробуем ещё раз..");
		 Sleep(3000);						   // Простое решение
		 return(1);							 // Выход из функции
	  case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
		 Sleep(500);							// Простое решение
		 return(1);							 // Выход из функции
		 // Критические ошибки
	  case  2: Alert("Общая ошибка.");
		 return(0);							 // Выход из функции
	  case  5: Alert("Старая версия терминала.");
		 Work=false;							// Больше не работать
		 return(0);							 // Выход из функции
	  case 64: Alert("Счет заблокирован.");
		 Work=false;							// Больше не работать
		 return(0);							 // Выход из функции
	  case 133:Alert("Торговля запрещена.");
		 return(0);							 // Выход из функции
	  case 134:Alert("Недостаточно денег для совершения операции.");
		 return(0);							 // Выход из функции
	  default: Alert("Возникла ошибка ",Error); // Другие варианты   
		 return(0);							 // Выход из функции
	 }
  }


#41 JanUs5

JanUs5

    пробегал

  • Пользователи
  • Pip
  • 1 сообщений

Опубликовано 30 Октябрь 2008 - 05:39

Добрый вечер господа.
У меня просьба - нужен звуковой сигнал на RSI при пересечений уровня 50. Сам я попробовал написать на основе примера в статье "Звуковые сигналы в индикаторах" (http://articles.mql4.com/ru/292) - но увы, багаж знаний мой в части программирования скуден и смешон... Вообщем. кто чем может- помогите.

#42 arttom

arttom

    прописался

  • Пользователи ST test (off)
  • PipPipPip
  • 62 сообщений

Опубликовано 07 Ноябрь 2008 - 09:50

то же пытаюсь написать советника: при открытии рыночного ордера необходимо звуковое сообщение (напоминание) об открытии отложенного ордера в обратном направлении. Как только отложенник открыт, соощение прекращается.
void start() {
if(OrderType()==OP_SELL)
{ PlaySound(Sound_1_up);
}
if(OrderType()==OP_BUY)
{ PlaySound(Sound_1_dn);
}}

как дальше сделать, Help please!

Сообщение изменено: arttom, 07 Ноябрь 2008 - 09:53 .

Если есть желание правильно торговать, то прибыль появится, как результат правильной торговли.

#43 Shu

Shu

    Option Trader

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 1 897 сообщений

Опубликовано 08 Ноябрь 2008 - 12:59

то же пытаюсь написать советника: при открытии рыночного ордера необходимо звуковое сообщение (напоминание) об открытии отложенного ордера в обратном направлении. Как только отложенник открыт, соощение прекращается.
void start() {
if(OrderType()==OP_SELL)
{ PlaySound(Sound_1_up);
}
if(OrderType()==OP_BUY)
{ PlaySound(Sound_1_dn);
}}

как дальше сделать, Help please!

скорее, не "дальше", а перед. :wink:

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

#44 SnowBars

SnowBars

    пробегал

  • Пользователи
  • Pip
  • 1 сообщений

Опубликовано 17 Ноябрь 2008 - 04:40

Помогите, пожалуйста, как можно в советнике сделать следующее: нужно открыть два отложенных ордера по очереди (так как я понимаю, что одновремменно два открыть нельзя, если ошибаюсь, то поправте), один buy, другой sell(кол-во лотов одинаковое) и в случае срабатывания одного из них, тут же удалить второй!!!

#45 selenat

selenat

    прописался

  • Пользователи ST test (off)
  • PipPipPip
  • 56 сообщений

Опубликовано 25 Декабрь 2008 - 07:32

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




Посетителей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных пользователей

Рейтинг брокеров форекс: кто лидер, кто аутсайдер и почему?




Masterforex-V NordFX

Rambler's Top100

Принимаем Z-Payment