Ответ
 
Опции темы
Старый 26.09.2012, 18:02   #401 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Василий, тут вариантов несколько, но не полная информация для правильного решения.
Можно расставить последовательность команд в определённой последовательности так чтобы сначала закрылись ордера, переключить флаг и реверс, а потом открывать ордера.
Или можно в цикле закрытия ордеров проверять наличие в OrderComment() строки REVERS.
Здравствуйте. А какя ещё нужна информация? Я про советник DC.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.09.2012, 06:52   #402 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Мне по большому счёту нужно чтобы после выполнения условия некоторые операции выполнились один раз и всё.
eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 27.09.2012, 07:15   #403 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,114
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от eevviill Посмотреть сообщение
Здравствуйте. А какя ещё нужна информация? Я про советник DC.
Я понял, что о нём речь. Потому и сказал о комментарии ордера.
Сообщение от eevviill Посмотреть сообщение
Мне по большому счёту нужно чтобы после выполнения условия некоторые операции выполнились один раз и всё.
А вот это как-раз и не понятно. Вариантов слишком много. Включай скайп, разберёмся.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (27.09.2012)
Старый 27.09.2012, 22:45   #404 (permalink)
Прохожий
 
Аватар для Сергей Ниоткуда
 
Регистрация: 27.09.2012
Сообщений: 2
Репутация: 2
Сергей Ниоткуда
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Поинты: 0
Здравствуйте! Помогите с написанием скрипта пожалуйста:
Код HTML:
bool Result1=1;
  for (int i=0; i<OrdersTotal(); i++)         
     {
      if (OrderSelect(i,SELECT_BY_POS)
        {
         if Result1=((OrderMagicNumber()==Magic1) && (OrderType()>1)) //A
           {
             if (Result1==0)     //B
                {
                     OrderSend(Symbol(),OP_BUYSTOP... и т.д
Суть такова: Если находится ордер А, то ордер ниже НЕ должен выставляться!
И наоборот - если ордер со значением А не находится, то сделка открывается!
PS: В строке B я вообще не соображаю, что писать, так что не серчайте на ошибки) Если можно, то напишите пожалуйста скрипт с пояснениями чтобы понимать!
Сергей Ниоткуда вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 28.09.2012, 07:42   #405 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Сергей Ниоткуда Посмотреть сообщение
Здравствуйте! Помогите с написанием скрипта пожалуйста:
Код HTML:
bool Result1=1;
  for (int i=0; i<OrdersTotal(); i++)         
     {
      if (OrderSelect(i,SELECT_BY_POS)
        {
         if Result1=((OrderMagicNumber()==Magic1) && (OrderType()>1)) //A
           {
             if (Result1==0)     //B
                {
                     OrderSend(Symbol(),OP_BUYSTOP... и т.д
Суть такова: Если находится ордер А, то ордер ниже НЕ должен выставляться!
И наоборот - если ордер со значением А не находится, то сделка открывается!
PS: В строке B я вообще не соображаю, что писать, так что не серчайте на ошибки) Если можно, то напишите пожалуйста скрипт с пояснениями чтобы понимать!
Код:
bool Result1=true;
  for (int i=0; i<OrdersTotal(); i++)         
     {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)
        {
         if((OrderMagicNumber()==Magic1) && (OrderType()>1))Result1=false;//A
        }
      }
if (Result1) OrderSend(Symbol(),OP_BUYSTOP... и т.д

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (28.09.2012)
Старый 28.09.2012, 08:06   #406 (permalink)
Заблокирован
За второе место в конкурсе 

 
Аватар для eevviill
 
Регистрация: 30.07.2009
Сообщений: 5,474
Репутация: 9022
eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill eevviill
Сказал(а) спасибо: 13,680
Поблагодарили 9,022 раз(а) в 3,179 сообщениях
Поинты: 1105
Отправить сообщение для eevviill с помощью Skype™
Сообщение от Сергей Ниоткуда Посмотреть сообщение
Здравствуйте! Помогите с написанием скрипта пожалуйста:
Код HTML:
bool Result1=1;
  for (int i=0; i<OrdersTotal(); i++)         
     {
      if (OrderSelect(i,SELECT_BY_POS)
        {
         if Result1=((OrderMagicNumber()==Magic1) && (OrderType()>1)) //A
           {
             if (Result1==0)     //B
                {
                     OrderSend(Symbol(),OP_BUYSTOP... и т.д
Суть такова: Если находится ордер А, то ордер ниже НЕ должен выставляться!
И наоборот - если ордер со значением А не находится, то сделка открывается!
PS: В строке B я вообще не соображаю, что писать, так что не серчайте на ошибки) Если можно, то напишите пожалуйста скрипт с пояснениями чтобы понимать!
Не знаю что ты конкретно имеешь ввиду, но возможно тебе поможет команда break. Она отсанавливает цыкл.

PHP код:
bool order2_open=false;
for (
int i=0i<OrdersTotal(); i++)         
     {
      if (
OrderSelect(i,SELECT_BY_POS)
        {
          if ((
OrderMagicNumber()==Magic1) && (OrderType()>1))
 
order2_open=true;
break;
}

eevviill вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 01.10.2012, 06:39   #407 (permalink)
Прохожий
 
Аватар для Сергей Ниоткуда
 
Регистрация: 27.09.2012
Сообщений: 2
Репутация: 2
Сергей Ниоткуда
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Поинты: 0
Ребята! Спасибо за помощь! Выручили!
Сергей Ниоткуда вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (01.10.2012)
Старый 05.10.2012, 12:21   #408 (permalink)
Активный участник
 
Аватар для SlavaR
 
Регистрация: 25.05.2010
Адрес: Москва
Сообщений: 81
Репутация: 34
SlavaR
Сказал(а) спасибо: 1,083
Поблагодарили 33 раз(а) в 22 сообщениях
Поинты: 29
Отправить сообщение для SlavaR с помощью ICQ Отправить сообщение для SlavaR с помощью Skype™

По умолчанию Помогите!


Здравствуйте.
Помогите пожалуйста, с написанием работы кода советника.
Должен работать так: сначала выставляются байстоп и селстоп ордера. Как цена достигла одного из ник, и стала рыночной, второй, убирается, и на его место должен выстаиться удвоенный. А получается постоянное удаление и установка этого ордера, потому что незнаю, как прописать ещё одно нужное условие, ну например удаление по тикету.
Вот код:
Заранее всем премного благодарен, осообенно eevviill за то что сподвиг на это и за его уроки продолжай - надо .

PHP код:
 //+------------------------------------------------------------------+
//|            модуль установки   ордеров                            |
//+------------------------------------------------------------------+
   
if (li_64 == && li_68 == && ld_24 MaxLoss) {    //если 
      
price_112 NormalizeDouble(Ask FirstStep PointDigits);  // то цена = 
      
if (li_56 == ||price_112 NormalizeDouble(ld_76 FirstStep PointDigits)) {
         if (
li_56 == 0lots_120 lot// если li_56(бай) не изменилось то лот равен условленному
               
OrderSend(Symbol(), OP_BUYSTOPlots_120price_112300" TStopOrd_T BuyS"Magic0Blue); //посылаем ордер  
      
}
   }
      
      if (
cmd_72 == OP_SELL  && li_60 != 0) {    //если 
      
price_112 NormalizeDouble(Ask FirstStep PointDigits);  // то цена = 
      
if (cmd_72 == OP_SELL || price_112 NormalizeDouble(ld_76 FirstStep PointDigits)) {
         if (
li_60 != && cmd_72 == OP_SELL )lots_120 lot MathPow(K_Lotli_60) + li_60 PlusLot//иначе lot_120 = 
         
OrderSend(Symbol(), OP_BUYSTOPlots_120price_112300"TStopOrd_T BuyS "Magic0Blue); //посылаем ордер
         
}
     }  
    
      if (
li_68 == && li_64 == && ld_16 MaxLoss)  {    //если 
       
price_112 NormalizeDouble(Bid FirstStep PointDigits);   // то цена = 
      
if (li_60 == || price_112 NormalizeDouble(ld_100 FirstStep PointDigits)) {
         if (
li_60 == 0lots_120 lot// если li_60 sell не изменилось то лот равен условленному
               
OrderSend(Symbol(), OP_SELLSTOPlots_120price_112300" TStopOrd_T SellS"Magic0Red); //посылаем ордер                
      
}
   } 
       
       if (
cmd_72 == OP_BUY  && li_56 != 0) {     //если
      
price_112 NormalizeDouble(Bid FirstStep PointDigits);  
      if (
cmd_72 == OP_BUY || price_112 NormalizeDouble(ld_100 FirstStep PointDigits)) {
         if (
li_56 != && cmd_72 == OP_BUYlots_120 lot MathPow(K_Lotli_56) + li_56 PlusLot//иначе lot_120 =
         
OrderSend(Symbol(), OP_SELLSTOPlots_120price_112300" TStopOrd_T SellS"Magic0Red); //посылаем ордер
       
}
   } 
   
 
if (
cmd_72 == OP_BUYSTOP && li_60 == 1  || lots_120 == lot)OrderDelete(OrderTicket());
 if (
cmd_72 == OP_SELLSTOP && li_56 == 1  || lots_120 == lot)OrderDelete(OrderTicket()); 
SlavaR вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (05.10.2012)
Старый 05.10.2012, 12:51   #409 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,114
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от SlavaR Посмотреть сообщение
Здравствуйте.
Помогите пожалуйста, с написанием работы кода советника.
Должен работать так: сначала выставляются байстоп и селстоп ордера. Как цена достигла одного из ник, и стала рыночной, второй, убирается, и на его место должен выстаиться удвоенный. А получается постоянное удаление и установка этого ордера, потому что незнаю, как прописать ещё одно нужное условие, ну например удаление по тикету.
Вот код:
Заранее всем премного благодарен, осообенно eevviill за то что сподвиг на это и за его уроки продолжай - надо .
Читать декомпил не по-мне. А на вопрос ответить могу.
В этом случае надо добавить условие наличия противоположного ордера. На человеческом языке так: если ордера бай нету и ордера селстоп нету то поставим ордер селстоп со стартовым лотом, а если есть то удалим селстоп и поставим ордер селстоп с удвоенным лотом.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (05.10.2012), SlavaR (05.10.2012)
Старый 05.10.2012, 13:53   #410 (permalink)
Активный участник
 
Аватар для SlavaR
 
Регистрация: 25.05.2010
Адрес: Москва
Сообщений: 81
Репутация: 34
SlavaR
Сказал(а) спасибо: 1,083
Поблагодарили 33 раз(а) в 22 сообщениях
Поинты: 29
Отправить сообщение для SlavaR с помощью ICQ Отправить сообщение для SlavaR с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Читать декомпил не по-мне. А на вопрос ответить могу.
В этом случае надо добавить условие наличия противоположного ордера. На человеческом языке так: если ордера бай нету и ордера селстоп нету то поставим ордер селстоп со стартовым лотом, а если есть то удалим селстоп и поставим ордер селстоп с удвоенным лотом.
Данное условие я прописывал, именно с начальным лотом, но почему-то оно не работает. То есть я прописал переменную ob_1 = начальному лоту и вставил в код причем в разные места и делал её и булиан как, сейчас, и дабл, всё равно не удалят.
PHP код:
  if (cmd_72 == OP_BUYSTOP && li_60 == && ob_1 == (true))OrderDelete(OrderTicket()); 
эта строка звучит так, если есть байстоп и сел с начальным лотом, то удаляем стоп ордер. Я к тому, что это условие я писал, но именно когда прописываешь начальный лот, код перестаёт удалять ордер
пипец какойто

Последний раз редактировалось SlavaR; 05.10.2012 в 14:03.
SlavaR вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.10.2012, 15:04   #411 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3646
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,114
Поблагодарили 3,650 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от SlavaR Посмотреть сообщение
Данное условие я прописывал, именно с начальным лотом, но почему-то оно не работает. То есть я прописал переменную ob_1 = начальному лоту и вставил в код причем в разные места и делал её и булиан как, сейчас, и дабл, всё равно не удалят.
PHP код:
  if (cmd_72 == OP_BUYSTOP && li_60 == && ob_1 == (true))OrderDelete(OrderTicket()); 
эта строка звучит так, если есть байстоп и сел с начальным лотом, то удаляем стоп ордер. Я к тому, что это условие я писал, но именно когда прописываешь начальный лот, код перестаёт удалять ордер
пипец какойто
Чтобы удалить стоп. ордер или закрыть рыночный его нужно выбрать функцией OrderSelect() проверить его тип, символ, желательно магик, определить тикет и только потом писать OrderDelete(OrderTicket());
А с какого будуна тебе пришло в голову объявить булеву переменную и присвоить ей размер лота???
Ведь в таком случае если лот будет больше 0, не важно сколько, будет true, начальный лот или конечный компу по-барабану.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (05.10.2012), SlavaR (05.10.2012)
Старый 05.10.2012, 15:40   #412 (permalink)
Активный участник
 
Аватар для SlavaR
 
Регистрация: 25.05.2010
Адрес: Москва
Сообщений: 81
Репутация: 34
SlavaR
Сказал(а) спасибо: 1,083
Поблагодарили 33 раз(а) в 22 сообщениях
Поинты: 29
Отправить сообщение для SlavaR с помощью ICQ Отправить сообщение для SlavaR с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Чтобы удалить стоп. ордер или закрыть рыночный его нужно выбрать функцией OrderSelect() проверить его тип, символ, желательно магик, определить тикет и только потом писать OrderDelete(OrderTicket());
А с какого будуна тебе пришло в голову объявить булеву переменную и присвоить ей размер лота???
Ведь в таком случае если лот будет больше 0, не важно сколько, будет true, начальный лот или конечный компу по-барабану.
сделаю
Благодарю.
SlavaR вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.10.2012, 18:25   #413 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Я занялся написанием индикатора. По сути на данный момент мне нужно, чтоб рисовалась линия по 2 точках на выбранной машке. Есс-но точки на машке будем выбирать по сдвигу N-баров назад.

На скрине показано, что я хочу нарисовать.


Есс-но я предположил, что нужно изначально найти это 2 точки на машке, по которым нужно рисовать линию.
Я это добавил в код:
PHP код:
 double point1OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1),   // Находим значение точек для...
           
point2OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2);   // отрисовки линии по ним. 
Но потом когда начал писать функцию ObjectCreate у меня возникла мысль, что выходит эти значения тут как-бы не нужны.
Ведь в функции ObjectCreate нужно указывать время открытия и цену каждой точки, а точка на машке это другое. Из-за неопытности, т.к. пишу первый индикатор у меня неопределённости.
Т.к. мы рисует линии по машке, а iMA возвращает как я понимаю, цену на тот момент времени на сдвиге определённого бара. Как правильно это понять? Алгоритм не совсем понимаю.

По логике нужно писать так?
PHP код:
ObjectCreatestring nameint typeint windowiTime(string symbolint timeframeshiftBarsBack1), double point1OfMaiTime(string symbolint timeframeshiftBarsBack2), point2OfMa
Про переменные point1OfMa и point2OfMa я уже упомянул выше, они укажут на цену на тот момент времени учитывая сдвиг на машке на shiftBarsBack1 и shiftBarsBack2.
А время уже возьмём из массива времени Time[] через функцию iTime(string symbol, int timeframe, shift), потому что у них будет разные сдвиги т.е. параметр shiftBarsBack1 и shiftBarsBack2.
Верно?

Последний раз редактировалось hoz; 05.10.2012 в 18:40.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.10.2012, 19:40   #414 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
Я занялся написанием индикатора. По сути на данный момент мне нужно, чтоб рисовалась линия по 2 точках на выбранной машке. Есс-но точки на машке будем выбирать по сдвигу N-баров назад.

На скрине показано, что я хочу нарисовать.


Есс-но я предположил, что нужно изначально найти это 2 точки на машке, по которым нужно рисовать линию.
Я это добавил в код:
PHP код:
 double point1OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1),   // Находим значение точек для...
           
point2OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2);   // отрисовки линии по ним. 
Но потом когда начал писать функцию ObjectCreate у меня возникла мысль, что выходит эти значения тут как-бы не нужны.
Ведь в функции ObjectCreate нужно указывать время открытия и цену каждой точки, а точка на машке это другое. Из-за неопытности, т.к. пишу первый индикатор у меня неопределённости.
Т.к. мы рисует линии по машке, а iMA возвращает как я понимаю, цену на тот момент времени на сдвиге определённого бара. Как правильно это понять? Алгоритм не совсем понимаю.

По логике нужно писать так?
PHP код:
ObjectCreatestring nameint typeint windowiTime(string symbolint timeframeshiftBarsBack1), double point1OfMaiTime(string symbolint timeframeshiftBarsBack2), point2OfMa
Про переменные point1OfMa и point2OfMa я уже упомянул выше, они укажут на цену на тот момент времени учитывая сдвиг на машке на shiftBarsBack1 и shiftBarsBack2.
А время уже возьмём из массива времени Time[] через функцию iTime(string symbol, int timeframe, shift), потому что у них будет разные сдвиги т.е. параметр shiftBarsBack1 и shiftBarsBack2.
Верно?
Вроде верно. Единственное что создать объект мало. Нужно ещё задать ему свойства. Например цвет, тольщину, луч... Иначе линия может оказаться невидимой и уходящей в бесконечность.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (06.10.2012), hoz (05.10.2012)
Старый 05.10.2012, 23:52   #415 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
Вот то, что есть на данный момент:

PHP код:
extern string  h1 "основные параметры машки";
extern int     maTF 5;
extern int     maPeriod 50;
extern int     maShiftByPrice 0;
extern int     maMethod 0;
extern int     maPrice 0;
extern string  h2 "===============================";

string         h3 "значения shift для машки";
extern double         shiftBarsBack1 5;   // Первое значение shift.
extern double         shiftBarsBack2 10;  // Второе значение shift.
string         short_Name;
extern string  h4 "===============================";

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkGreen
#property indicator_minimum 30
#property indicator_maximum -30
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
  
// ArrayInitialize
   
  // -------------- блок инициализации закончен ----------------------
   
return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    
ObjectsDeleteAll(); // Очистим график от всего.
   
return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    
double point1OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1),   // Находим значение точек для...
           
point2OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2);   // отрисовки линии по ним.
    
    
ObjectCreate("trendLine",OBJ_TREND,0,iTime(Symbol(),maTF,shiftBarsBack1),point1OfMa,iTime(Symbol(),maTF,shiftBarsBack2),point2OfMa);
    
ObjectSet("trendLine",OBJPROP_COLOR,Black);
    
ObjectSet("trendLine",OBJPROP_WIDTH,4);
    
ObjectSet("trendLine",OBJPROP_STYLE,DRAW_SECTION);
    
   return(
0);
  } 

Получилось не то, что нужно. Хотя что-то получилось, что уже радует. Вот скрин:



Судя по скину линия рисуется не по тем точкам. А также она не имеет конца. По ходу это не отрезок, а прямая.
Есть недочёт какой-то?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.10.2012, 07:31   #416 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Получилась не прямая, луч. Попробуй поменять флаг "луч". Для этого используй ObjectSet

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (06.10.2012)
Старый 06.10.2012, 10:11   #417 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
В документации есть свойство объекта OBJPROP_RAY, которое позволяет Получать/устанавливать флаг свойства луч для объектов типа OBJ_TREND и ему подобных
Для свойства отрезок подобного не нашлось. Как быть тогда?

Через
PHP код:
etIndexStyle(1,DRAW_SECTION); 
я установил свойство линии в отрезок:

Вот что вышло:
PHP код:
extern string  h1 "основные параметры машки";
extern int     maTF 5;
extern int     maPeriod 50;
extern int     maShiftByPrice 0;
extern int     maMethod 0;
extern int     maPrice 0;
extern string  h2 "===============================";

string         h3 "значения shift для машки";
extern double         shiftBarsBack1 5;   // Первое значение shift.
extern double         shiftBarsBack2 10;  // Второе значение shift.
string         short_Name;
extern string  h4 "===============================";

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DarkGreen
#property indicator_minimum 30
#property indicator_maximum -30
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   
SetIndexStyle(1,DRAW_SECTION);
  
// ArrayInitialize
   
  // -------------- блок инициализации закончен ----------------------
   
return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    
ObjectsDeleteAll(); // Очистим график от всего.
   
return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    
double point1OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1),   // Находим значение точек для...
           
point2OfMa iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2);   // отрисовки линии по ним.
    
    
ObjectCreate("trendLine",OBJ_TREND,0,iTime(Symbol(),maTF,shiftBarsBack2),point2OfMa,iTime(Symbol(),maTF,shiftBarsBack1),point1OfMa);
  
//  ObjectSet("trendLine",OBJPROP_COLOR,Black);
  //  ObjectSet("trendLine",OBJPROP_WIDTH,4);
  //  ObjectSet("trendLine",OBJPROP_STYLE,DRAW_SECTION);
   // OBJ_TREND
    
   
return(0);
  } 
Но тем не менее, рисуется всё-равно луч.
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.10.2012, 13:32   #418 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
После установки объекта добавь строчку
ObjectSet("trendLine",OBJPROP_RAY,false);

У меня же получается отрезки рисовать на индикаторе
Нажмите на изображение для увеличения
Название: divercci.gif
Просмотров: 13
Размер:	8.6 Кб
ID:	89866

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

Последний раз редактировалось Ugar; 06.10.2012 в 13:47.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (06.10.2012)
Старый 06.10.2012, 14:35   #419 (permalink)
hoz
Активный участник
 
Аватар для hoz
 
Регистрация: 01.04.2011
Сообщений: 530
Репутация: 111
hoz hoz
Сказал(а) спасибо: 59
Поблагодарили 112 раз(а) в 88 сообщениях
Поинты: 538
Отправить сообщение для hoz с помощью ICQ
PHP код:
ObjectSet("trendLine",OBJPROP_RAY,false); 

Про дополнительный параметр false или true в функции ObjectSet в документации ни слова. Как это можно было узнать интересно?
hoz вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 06.10.2012, 15:01   #420 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1966
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,895 раз(а) в 1,071 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от hoz Посмотреть сообщение
PHP код:
ObjectSet("trendLine",OBJPROP_RAY,false); 
Про дополнительный параметр false или true в функции ObjectSet в документации ни слова. Как это можно было узнать интересно?
Цитата:
bool ObjectSet( string name, int prop_id, double value)Изменение значения указанного свойства объекта. В случае успеха функция возвращает TRUE, иначе FALSE. Для получения информации об ошибке необходимо вызвать функцию GetLastError().
См. также ObjectGet(). Параметры:
name - Имя объекта.
prop_id
- Идентификатор свойства объекта. Может быть любым из списка свойств объекта.
value - Новое значение указанного свойства.
От сюда следует что в prop_id задаётся идентификатор, а в value значение этого идентификатора.

Цитата:
OBJPROP_RAY 10 bool Получает/устанавливает флаг свойства луч для объектов типа OBJ_TREND и ему подобных
Здесь упоминается что это флаг, да и тип его указан bool.
А теперь вопрос, какие же значения может иметь флаг с типом bool?

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

Последний раз редактировалось Ugar; 06.10.2012 в 15:06.
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
eevviill (06.10.2012)
Ответ

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


Опции темы

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

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



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


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