初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1210

 
MQL_User:

我没想到会遇到这样的问题,因为乍一看,从程序中重新绘制图表应该是理所当然的事。有鉴于此,ChartRedraw()函数 的目的并不明确......

它不是用于指示器,而是用于显示在图形对象的属性中所作的改变。

你需要向指标发送一个刻度 - 然后指标将被重新绘制。好吧,也就是说,它将在新的刻度上做它应该做的事情。

而要发送一个新的tick,你需要等待它,这不是一个选项,或者通过PCM-->刷新图表,这也不是一个选项,或者使用ChartSetSymbolPeriod() 函数,对当前图表使用这样的参数。

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
 


你好,请帮助我,我写了一个脚本,开了一个限价单,但是是以市场价格开的。所有的工作,决定把它改成低于/高于市场的限制,没有任何作用,虽然交易服务器的返回代码是10009,GetLastError()返回0。 代码。

void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =Ask;                                    // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
如果request.price的例子是:Ask-Point()*30没有设置,价格正常化也没有任何结果。
 
Artem,你能说什么,对上面的问题,有趣的意见。 作为一种学习经验。
 
Artyom Trishkin:

这不是为了指示器,而是为了显示对图形对象的属性所作的改变。

你需要向指标发送一个刻度线--然后指标会重新绘制。也就是说,它将做它应该做的事情,在新的蜱虫。

要发送一个新的tick,你必须等待它,这不是一个选项,或者使用PKM--> Refresh刷新图表,这也不是一个选项,或者使用ChartSetSymbolPeriod(),对当前图表使用这些参数。

Artem,谢谢你。

这一切都在发挥作用。:)

 
有谁知道如何在视觉测试 时禁止在图表上显示EA中使用的所有指标?
 
Сергей Таболин:
有谁知道如何在视觉测试 时禁止在图表上显示EA中使用的所有指标?

TesterHideIndicators(true)。

 

如何判断该指标是否可以在另一个时间框架下工作?

历史上相邻的时间段没有分页(没有建立)。该指标在M15上工作,但我需要看H1(在M15图表的顶部),当我切换它时--图表是空的。当我在几秒钟内刷新 - 美,所有的缓冲区都被渲染了。

我怎样才能使指标在另一个时间框架上检查历史记录,并保持计算,直到它出现?

 
Igor Zakharov:

TesterHideIndicators(true)。

非常感谢你))))

 

我无法从另一个时间框架中获得ATP值。

ATR_handle=iATR(_Symbol,ATR_TF,ATR_Period);
CopyBuffer(ATR_handle,0,time[i],1,ATR);

从当前的时间框架 - 有效。 从较早的时间框架 - 总是0

 

在期货上,你如何创建一个连续的合同?用于技术图表分析?

原因: