Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1059

 
artmedia70:

А вот тут нужно уже конкретно понимать что именно вы хотите перерисовать.

Вполне может быть придётся полностью пересчитать все буферы индикатора.
Нужно экспериментировать с поведением индикатора, и его реакцией на внешнее изменение его внутренних переменных.

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

Короче - эксперименты нужны...

Спасибо!

 
artmedia70:

     Почему-то появление Тейкпрофита не прерывает суммирование. Считает все минуса в истории.
 
Neron_plus34:
     Почему-то появление Тейкпрофита не прерывает суммирование. Считает все минуса в истории.
Разверните цикл.
 
artmedia70:
Разверните цикл.
  Спасибо работает.
 

Здравствуйте...Раньше торговал на ForexClub на МТ4 который скачал оттуда...решил открыть еще счет на InstaForex...но когда подключаюсь к другому счёту в экране котировок акций надпись "ожидание обновления"....приходится опять выбирать "открыть график" чтобы открыть нужный экран...попробовал скачать МТ4 отсюда от производителя, но тогда не могу подключиться к торговым счетам....пишет нет связи...что делаю неправильно? помогите пожалуйста....

 
Forexman77:

Спасибо, сделал!

А как сделать, чтобы индикатор перерисовывался после перетаскивания линии. 

// Определение LastBar по расположению StopLine на графике
bool fNewStopLine(){
   bool New;
   int StopBar, Error;
   double Shift;
   datetime StopLine;
   if( ObjectFind("StopLine")==0 ){                // Есть стоп-линия
      StopLine=ObjectGet("StopLine",OBJPROP_TIME1);// Время стоп-линии
      StopBar=iBarShift(NULL,0,StopLine);          // Бар стоп-линии
      LastBar=StopBar+1;                           // Бар окончания построения
      if( StopBar<=БарОкончания ){                 //    правее или на последнем баре
         LastBar=БарОкончания;                     // Перенести на нулевой бар
         StopBar=LastBar-1;
         StopLine=Time[StopBar];
         if( !ObjectMove("StopLine",0,StopLine,0) ){
            if( !РежимОтладки ) PlaySound("alert.wav");
            Print("***   StopLine - объект не перемещен, ошибка "+GetLastError());
      }  }
      if( StopLine!=OldStopLine ){                 // Новая стоп-линия
         ReInit();                                 // Повторная инициализация
         ClearScreen();                            // Очистить экран
         Shift=0.01*(WindowPriceMax()-WindowPriceMin())*СдвигИндикатораТиков;
         Error=fArrow("TickIndicator","",0,StopBar // Сформировать индикатор тика
                     ,WindowPriceMin()+Shift,0,0,0,0
                     ,ЗнакИндикатораТиков,ЦветИндикатораТиков,РазмерИндикатораТиков);
         OldStopLine=StopLine;                     // Стоп-линия обработана
         New=true;                                 // Выполнить построение заново
      }
      else{                                        // Нет новой стоп-линии
         New=false;                                // Построение заново не выполнять
   }  }
   else{                                           // Нет стоп-линии
      New=false;                                   // Построение заново не выполнять
      Error=fObjectDelete("TickIndicator");        // Удалить индикатор тика
   }
   return(New);
}
 
tara:

Спасибо!
 

Столкнулся с проблемой. Я на базе одного индикатора делаю свои индикатор но там есть не сколько строчек предназначение которых я не понимаю и при этом эти строчки использует dll библиотеку. Можете своими словам описать для чего эти строчки. И как их переделать не  используя dll библиотеку? Ниже выделил эти строчки:

#import "user32.dll"
        int  RegisterWindowMessageA (string lpString); 
        int  PostMessageA           (int hWnd,int Msg,int wParam,int lParam);
                
#define WM_COMMAND                     0x0111
#import

            int MT4InternalMsg;
            int hwnd;
            string sn; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

  if(MT4InternalMsg == 0)  
         {
         MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); 
    }       
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
      
  }

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
                  hwnd = WindowHandle(Symbol(), 1);
        if(PostMessageA(hwnd, 0x0111, 0x822c, 0) == false)
          {
          hwnd = 0;
          return;
          }
          PostMessageA(hwnd, MT4InternalMsg, 2, 1);    
  }
//+------------------------------------------------------------------+
 
1. Как одновременно открыть два и более ордера?
2. Как узнать что ордер закрылся по TP или SL и вызывать что-то по этому событию?
3. Какие проблемы могут возникнуть при реальной торговле советником? Могут ли быть неисполнены TP, SL, отложенные и т.д. на серврере? Что делать в таком случае? Где надежно хранить логи сделок (в глобальных переменных, в терминале, в файлах, и др)?
 
smart_man:
1. Как одновременно открыть два и более ордера?
2. Как узнать что ордер закрылся по TP или SL и вызывать что-то по этому событию?
3. Какие проблемы могут возникнуть при реальной торговле советником? Могут ли быть неисполнены TP, SL, отложенные и т.д. на серврере? Что делать в таком случае? Где надежно хранить логи сделок (в глобальных переменных, в терминале, в файлах, и др)?

Здесь вы можете найти часть ответов: https://www.mql5.com/ru/forum/131859

Причина обращения: