任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1059

 
artmedia70:

而且你需要非常具体地说明你想重绘什么。

你可能不得不完全重新计算所有的指标缓冲区。
我们必须对指标的行为和它对其内部变量的外部变化的反应进行实验。

说实话,我从来没有试过(不......好吧,我当然也做过,很多时候我做的是对事件做出反应的指标,并画出所需的内容。但我最初使用了一种非标准的方法来绘制缓冲区)。做一个测试指标,在屏幕上画一些东西(至少在最近的条形图上画两到三个点),并尝试使用事件来改变其缓冲值。如果它改变了--这是与你的指标合作的一种方式,如果没有--这是要考虑的另一种方法。也许你必须把所有的计算移到一个定时器上,或者直接在OnChartEvent()中,在检测到所需的事件后做一个周期的重新计算......。

简而言之--需要进行实验...

谢谢你!

 
artmedia70:

由于某些原因,TakeProfit的出现并没有中断求和。计算历史上所有的负数。
 
Neron_plus34:
由于某些原因,TakeProfit的出现并没有中断求和。它计算了历史上所有的减分项。
展开循环。
 
artmedia70:
展开循环。
谢谢你,这很有效。
 

你好...我曾经在ForexClub用从那里下载的MT4进行交易...我决定在InstaForex公司开另一个账户...但是当我连接到另一个账户时,股票报价屏幕显示 "等待更新"....,我不得不再次选择"打开图表"来打开所需的屏幕...我试图从制造商那里下载MT4,但后来我无法连接到交易账户....pis没有连接...我做错了什么?请帮助....

 
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