Ответ
 
Опции темы
Старый 26.07.2012, 12:55   #321 (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
Так же не очень правильно сравнивать цену закрытия с стоп лоссом, даже нормированные. Это в тестере всё гладко, а в реале может иногда и не прокатить.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 28.07.2012, 10:12   #322 (permalink)
Активный участник
За второе место в конкурсе За второе место в конкурсе За призовое место в конкурсе 

 
Аватар для deepdig
 
Регистрация: 01.05.2011
Адрес: Волгоград
Сообщений: 58
Репутация: 85
deepdig
Сказал(а) спасибо: 660
Поблагодарили 83 раз(а) в 17 сообщениях
Поинты: 0
Помогите пожалуйста разобраться! Никак не получается добиться от советника октрытия второго цикла отложенных ордеров.


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

PHP код:
extern double lot1     0;      //рабочий лот
extern double lot2     0;      //лот 1-го отложенного ордера
extern double lot3     0;      //лот 2-го отложенного ордера
extern double lot4     0;      //лот 3-го отложенного ордера
extern double lot5     0;      //лот 4-го отложенного ордера
extern int Stop_Loss   0;        //стоп лосс
extern int Take_Profit 0;        //тейк профит
extern int Open_Level  0;        //уровень отдаления от цены, на котором ставим отложенный ордер
extern int slippage    2;         //уровень допустимого реквота
extern int MagicNumber 0;      //магическое число ордеров

int tiсket1=0ticket2=0ticket3=0ticket4=0ticket5=0;
  

  
int init()
  {
  
Comment("Старт советника ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
   
  return(
0);
  }



  
int start()
  {
  
  
   
double SLbuy=0SLsell=0,TPbuy=0,TPsell=0;
   
double Spread=Ask-Bid;
   
double Pending_By=Ask+Open_Level*Point;
   
double Pending_Sell=Bid-Open_Level*Point;
   
if(
Stop_Loss>0) {SLbuy=Ask-Stop_Loss*Point-SpreadSLsell=Bid+Stop_Loss*Point+Spread;}
if(
Take_Profit>0) {TPbuy=Ask+Take_Profit*PointTPsell=Bid-Take_Profit*Point;}


  
int count=OrdersTotal();                            // объявление переменной колличества ордеров
  
//-------------------------Старт цикла. Открытие 1-го и 2-го отрдеров ------------

   
if(count==0tiсket1=OrderSend (Symbol(), OP_SELLlot1Bidslippage,       
   
SLsellTPsell"LLL_1_Sell"MagicNumber0Red);
   
   if(
count==0ticket2=OrderSend (Symbol(), OP_BUYSTOPlot2Pending_Byslippage
   
SLbuy+Open_Level*PointTPbuy+Open_Level*Point"LLL_1_Bystop"MagicNumber0Blue);
    
//-------------------------удаление несработавших отложенных ордеров----------------------

   
for(int i=0i<counti++)                         // цикл пересчета открытых ордеров
   
{
   
bool res=OrderSelect(iSELECT_BY_POS);            // выбор ордера по позиции
      
if (res)
      {
      
int ticket=OrderTicket();
         if (
count==1OrderDelete(ticket);          // удаление несработавших отложенных ордеров
      
}
   }  
//---------------------------открытие 2-го отложенного ордера------------------------------
    
   
bool res1=OrderSelect(ticket2SELECT_BY_TICKET);           // выбор 1-го отложенного ордера         
      
if (res1)
      {
      
int type=OrderType();                           // проверка состояния 1-го отложенного ордера
      
         
if (type==0&&ticket3==0ticket3=OrderSend (Symbol(), OP_SELLSTOPlot3
         
Pending_Sell+SpreadslippageSLsell-Open_Level*PointTPsell-Open_Level*Point"LLL_1_Selltop"MagicNumber0Yellow);  
                                                      
//открытие 2-го отложенного ордера
      
}
          
      
//---------------------------открытие 3-го отложенного ордера------------------------------      
      
   
bool res2=OrderSelect(ticket3SELECT_BY_TICKET);           // выбор 2-го отложенного ордера 
      
if (res2)
      {
      
int type2=OrderType();                          // проверка состояния 2-го отложенного ордера
      
         
if(type2==1&&ticket4==0ticket4=OrderSend (Symbol(), OP_BUYSTOPlot4Pending_By-Spreadslippage
         
SLbuy+Open_Level*Point-SpreadTPbuy+Open_Level*Point-Spread"LLL_2_Bystop"MagicNumber0Green);
                                                      
//открытие 3-го отложенного ордера   
      
}
         
//---------------------------открытие 4-го отложенного ордера------------------------------
      
   
bool res3=OrderSelect(ticket4SELECT_BY_TICKET);           // выбор 3-го отложенного ордера 
      
if (res3)
      {
      
int type3=OrderType();                          // проверка состояния 3-го отложенного ордера
      
         
if (type3==0&&ticket5==0ticket5=OrderSend (Symbol(), OP_SELLSTOPlot5
         
Pending_Sell+SpreadslippageSLsell-Open_Level*PointTPsell-Open_Level*Point"LLL_2_Selltop"MagicNumber0White);
                                                      
//открытие 4-го отложенного ордера   
      
}
   
   return(
0);
  } 
[свернуть]

Последний раз редактировалось chocolate; 01.08.2012 в 13:59.
deepdig вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.07.2012, 08:56   #323 (permalink)
Местный знаток
 
Аватар для vetallic
 
Регистрация: 31.08.2010
Сообщений: 352
Репутация: 511
vetallic - vetallic - vetallic - vetallic - vetallic - vetallic -
Сказал(а) спасибо: 87
Поблагодарили 509 раз(а) в 104 сообщениях
Поинты: 96
хелп... как правильно прописать расчет максимума и минимума за определенный период часового времени и открытие при пробое...
vetallic вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 30.07.2012, 09:21   #324 (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
Сообщение от vetallic Посмотреть сообщение
хелп... как правильно прописать расчет максимума и минимума за определенный период часового времени и открытие при пробое...
Код:
int _Hour_=8;
   double Maximum=iHigh(NULL,PERIOD_H1,iHighest(NULL,PERIOD_H1,MODE_HIGH,_Hour_,1));
   double Minimum=iLow(NULL,PERIOD_H1,iLowest(NULL,PERIOD_H1,MODE_LOW,_Hour_,1));
Здесь задаётся в _Hour_ количество часов для поиска максимума и минимума.
В переменных Maximum и Minimum, соответственно максимальная и минимальная цена за этот период.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
vetallic (30.07.2012)
Старый 31.07.2012, 09:02   #325 (permalink)
Интересующийся
 
Аватар для Praktikantrop
 
Регистрация: 31.07.2012
Сообщений: 5
Репутация: 1
Praktikantrop
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Прошу не пинать, только изучаю mql4, возник вопрос:
функция TimeCurrent() и значение массива Time[0] с индексом 0, разве не должны быть близкими по значению??? если эти значения в секундах, то разница между ними у меня составляет почти 16 часов, это нормально???
Praktikantrop вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 31.07.2012, 10:26   #326 (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
Сообщение от Praktikantrop Посмотреть сообщение
Прошу не пинать, только изучаю mql4, возник вопрос:
функция TimeCurrent() и значение массива Time[0] с индексом 0, разве не должны быть близкими по значению??? если эти значения в секундах, то разница между ними у меня составляет почти 16 часов, это нормально???
TimeCurrent() это время прихода последнего тика.
Time[0] это время открытия текущего бара, текущего тайм фрейма.
Если на графике выбран график D1 то разница между ними может достигать до 24 часов.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 31.07.2012, 10:59   #327 (permalink)
Интересующийся
 
Аватар для Praktikantrop
 
Регистрация: 31.07.2012
Сообщений: 5
Репутация: 1
Praktikantrop
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Похоже то был глюк.
Он наблюдался у меня на графике M1. но сейчас все норм, разница небольшая, измеряется десятками секунд, только при переключении на другой график или назад, иногда вылазят большие числа....
Praktikantrop вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 31.07.2012, 13:14   #328 (permalink)
Интересующийся
 
Аватар для Praktikantrop
 
Регистрация: 31.07.2012
Сообщений: 5
Репутация: 1
Praktikantrop
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Хорошо, а подсчет времени одного бара в секундах (TimeCurrent() - Time[Bars-1])/Bars
так корректно?
Praktikantrop вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 01.08.2012, 06:36   #329 (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
Сообщение от Praktikantrop Посмотреть сообщение
Хорошо, а подсчет времени одного бара в секундах (TimeCurrent() - Time[Bars-1])/Bars
так корректно?
Это что, попытка рассчитать среднее время бара? В любом случае это некорректно. Время идёт всегда, а в выходные баров нет. Да и дыры в истори не учтены.
Время бара в секунда соответствует периоду графика в численном представлении *60. Это конечно примерно, так как в mql4 всё привязано к тикам.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Praktikantrop (01.08.2012)
Старый 01.08.2012, 15:36   #330 (permalink)
Интересующийся
 
Аватар для Praktikantrop
 
Регистрация: 31.07.2012
Сообщений: 5
Репутация: 1
Praktikantrop
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Спасибо, с этим вроде разобрался. Но все равно МТ4 не работает так как я хочу)))) вот например нужно найти свечку, которая была месяц назад
я делаю так:
i=Bars-1;
while (Time[i] < (TimeCurrent()-60*60*24*30))
{
i--;
}
дальше смотрим что получилось
Alert(Time[i] - TimeCurrent());
и видим число 2032226 на М1, это получается 23 с половиной суток. Такое впечатление, что терминал выдает число с потолка. И плюс ко всему это число еще и разное на разных таймфреймах. Какой то рандом блин....
P.S. историю котировок не забыл подгрузить
Praktikantrop вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 01.08.2012, 16:13   #331 (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
Сообщение от Praktikantrop Посмотреть сообщение
Спасибо, с этим вроде разобрался. Но все равно МТ4 не работает так как я хочу)))) вот например нужно найти свечку, которая была месяц назад
я делаю так:
i=Bars-1;
while (Time[i] < (TimeCurrent()-60*60*24*30))
{
i--;
}
дальше смотрим что получилось
Alert(Time[i] - TimeCurrent());
и видим число 2032226 на М1, это получается 23 с половиной суток. Такое впечатление, что терминал выдает число с потолка. И плюс ко всему это число еще и разное на разных таймфреймах. Какой то рандом блин....
P.S. историю котировок не забыл подгрузить
Никакого рандома. Через задницу посчитано, но результат правильный. Прибавь выходные и получишь месяц.
Пожалуй лучше обойтись без цикла. Попробуй как скрипт вот такой код.

datetime CTime=TimeCurrent();//Текущее время
datetime Time30=CTime-60*60*24*30;//Время 30 дней назад
int bar=iBarShift(NULL,0,Time30,false); //номер ближайшего бара
Comment("Текущее время ",TimeToStr(CTime,TIME_DATE|TIME_MINUTES),
"\n","30 дней назад ",TimeToStr(Time[bar],TIME_DATE|TIME_MINUTES));

Надеюсь с помощью справочника разберёшься что написал.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 01.08.2012, 17:32   #332 (permalink)
Dom
 
Аватар для Dom
 
Регистрация: 09.03.2009
Сообщений: 1,032
Репутация: 2472
Dom Dom Dom Dom Dom Dom Dom Dom Dom Dom Dom
Сказал(а) спасибо: 204
Поблагодарили 2,473 раз(а) в 783 сообщениях
Поинты: 178
Ugar!Помоги пожалуйста,заклинило,не могу сообразить.Мне нужно выставить лимитный ордер по цене открытия,последней закрытой позиции по профиту.
У меня не получается,ума не хватает.
Dom на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 01.08.2012, 18:01   #333 (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
Сообщение от Dom Посмотреть сообщение
Ugar!Помоги пожалуйста,заклинило,не могу сообразить.Мне нужно выставить лимитный ордер по цене открытия,последней закрытой позиции по профиту.
У меня не получается,ума не хватает.
Ордера в истории находятся в порядке времени закрытия.
Перебирай в цикле исторические ордера от последнего к первому. Проверяй как закрылся ордер, если ордер закрылся не по тейку переходи к следующему по continue. Если по тейку то извлекай цену открытия по OrderOpenPrice и прерывай перебор break.
Далее устанавливай ордер по этой цене, не забудь предварительно её нормировать.
Естественно, перед этим всем надо убедиться что открытый ордер закрылся и что отложенный ордер ещё не установлен. Например переребором не исторических ордеров.

Если есть элементарные знания языка, всё что я здесь нацарапал будет понятно. А если нет то лучше обратиться к программисту.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Dom (01.08.2012), eevviill (02.08.2012)
Старый 01.08.2012, 20:06   #334 (permalink)
Dom
 
Аватар для Dom
 
Регистрация: 09.03.2009
Сообщений: 1,032
Репутация: 2472
Dom Dom Dom Dom Dom Dom Dom Dom Dom Dom Dom
Сказал(а) спасибо: 204
Поблагодарили 2,473 раз(а) в 783 сообщениях
Поинты: 178
Сообщение от Ugar Посмотреть сообщение
Ордера в истории находятся в порядке времени закрытия.
Перебирай в цикле исторические ордера от последнего к первому. Проверяй как закрылся ордер, если ордер закрылся не по тейку переходи к следующему по continue. Если по тейку то извлекай цену открытия по OrderOpenPrice и прерывай перебор break.
Далее устанавливай ордер по этой цене, не забудь предварительно её нормировать.
Естественно, перед этим всем надо убедиться что открытый ордер закрылся и что отложенный ордер ещё не установлен. Например переребором не исторических ордеров.

Если есть элементарные знания языка, всё что я здесь нацарапал будет понятно. А если нет то лучше обратиться к программисту.
Спасибо!Завтра попробую,сегодня уже ступор.Я пробовал прицепить Кимовские функции "Возвращает флаг закрытия последней позиции по тейку" и "Возвращает цену открытия последней закрытой позиций" не получилось.
Dom на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 02.08.2012, 11:56   #335 (permalink)
Интересующийся
 
Аватар для Praktikantrop
 
Регистрация: 31.07.2012
Сообщений: 5
Репутация: 1
Praktikantrop
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Сообщение от Ugar Посмотреть сообщение
Попробуй как скрипт вот такой код.
Все равно лыжи не едут. Точнее поехали но не полностью. Предложенный код работает на всех графиках кроме М1, тоесть кроме того графика, где подгружена история котировок. Выдает дату, далекую от нужной. хотя при жестком указании номера свечки, их можно прочитать (получается все свечки доступны). По идее должно работать
Praktikantrop вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.08.2012, 12:31   #336 (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
Сообщение от Praktikantrop Посмотреть сообщение
Все равно лыжи не едут. Точнее поехали но не полностью. Предложенный код работает на всех графиках кроме М1, тоесть кроме того графика, где подгружена история котировок. Выдает дату, далекую от нужной. хотя при жестком указании номера свечки, их можно прочитать (получается все свечки доступны). По идее должно работать
Может лыжи не едут потому что на асфальте?
Значит подгружена кривая или дырявая история.
Вот что у меня показывает на M1
Нажмите на изображение для увеличения
Название: 12.JPG
Просмотров: 8
Размер:	7.4 Кб
ID:	83288

Как видно отрабатывает точно 30 дней назад.

int bar=iBarShift(NULL,0,Time30,false); //номер ближайшего бара
Эта строчка находит бар которому принадлежит указанное время. Если такого бара нет то указывает ближайший. Если в конце строки вместо false указать true, то в случае не существующего бара не будет выискиваться ближайший, будет возвращено -1, то есть ошибка.

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

Последний раз редактировалось Ugar; 02.08.2012 в 12:33.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (02.08.2012), Praktikantrop (03.08.2012)
Старый 17.08.2012, 15:13   #337 (permalink)
Местный знаток
 
Аватар для vetallic
 
Регистрация: 31.08.2010
Сообщений: 352
Репутация: 511
vetallic - vetallic - vetallic - vetallic - vetallic - vetallic -
Сказал(а) спасибо: 87
Поблагодарили 509 раз(а) в 104 сообщениях
Поинты: 96
всем еще раз прет,
вот создаю индюк и вот хотел спросить как правильно записать патерн "молот"
у меня вышло так - ((C>O)&&(O<H)&&(C<H)&&(O==L)&&(O1<O)&&(C>H1))

нужно указание в пипсах наверно..., а то у меня бар на хз сколько уходит (вверх или низ) и фиксирует полот

Вроде нормально работает:


А потом такая фигня:

Последний раз редактировалось vetallic; 17.08.2012 в 15:18.
vetallic вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.08.2012, 15:34   #338 (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
Сообщение от vetallic Посмотреть сообщение
всем еще раз прет,
вот создаю индюк и вот хотел спросить как правильно записать патерн "молот"
у меня вышло так - ((C>O)&&(O<H)&&(C<H)&&(O==L)&&(O1<O)&&(C>H1))

нужно указание в пипсах наверно..., а то у меня бар на хз сколько уходит (вверх или низ) и фиксирует полот

Вроде нормально работает:


А потом такая фигня:
Название: молот2.JPG
Просмотров: 143

Размер: 1.4 Кб
1. У молотка ручка всегда длиннее чем сам молот. То есть тень должна быть длиннее тела.
2. Молот может быть и с двумя тенями. Но вторая тень должна быть ничтожно малой.
3. Цвет тела молотка не имеет значения.
4. Молоток бесполезен если он не на вершине
Лучше искать соотношение длинны тела к длине свечи

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (18.08.2012), vetallic (17.08.2012)
Старый 18.08.2012, 11:58   #339 (permalink)
Интересующийся
 
Аватар для saenko
 
Регистрация: 29.04.2011
Сообщений: 26
Репутация: 4
saenko
Сказал(а) спасибо: 10
Поблагодарили 3 раз(а) в 3 сообщениях
Поинты: 0

По умолчанию Ребята...помогите кто знает!!!!


У меня появилась проблема и я не представляю как ее можно решить постараюсь объяснить.
Значит в коде есть, который я выложил, есть 2 функции
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}

В функции void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) нужно поставить условие после которого решиться оставлять ордер или закрывать его...
Вроде бы ставил доп.условия, но так и ничего не получалось...
Может кто нибуть посмотрит и кажет есть ли в этих функциях ошибка или это я накасячил....
Вложения:
Тип файла: mq4 Osc_test(1).mq4 (37.0 Кб, 11 просмотров)
saenko вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.08.2012, 17:22   #340 (permalink)
Интересующийся
 
Аватар для manechka
 
Регистрация: 18.10.2010
Сообщений: 3
Репутация: 1
manechka
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 0
Здравствуйте возможно ли написать осциллятор который будет показывать свечной график старшего таймфрейма одного инструмента. Допустим ставлю 15М график евро
открываю осциллятор и в окне дневной график, далее перехожу в обзор рынка перетаскиваю инструмент на график показывает сразу два графика М15 и D1
manechka вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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