错误、漏洞、问题 - 页 1793 1...178617871788178917901791179217931794179517961797179817991800...3184 新评论 TheXpert 2017.02.10 08:06 #17921 fxsaber:那么有没有可能写出这样一个函数呢? 是的,你需要实现一个构造器和复制操作符 [删除] 2017.02.10 08:07 #17922 Slawa:更新后,在绘图类型DRAW_CANDLES中出现了一个错误:我按照这里的描述做了一切:https://www.mql5.com/ru/forum/23/page19#comment_2891050不能通过输入参数的选择来改变构建类型(1-2-3)。代码。#property indicator_separate_window#property indicator_plots 1#property indicator_buffers 4 //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//--- Перечисление - новые типы отрисовки DRAW_CANDLEenum ENUM_DRAW_CANDLE_TYPE { DRAW_CANDLE_TYPE_1, // Один цвет: #1 - контуры и тела DRAW_CANDLE_TYPE_2, // Два цвета: #1 - контуры, #2 - тела DRAW_CANDLE_TYPE_3 // Три цвета: #1 - контуры, #2 - восход., #3 - нисход. };//---double bufopen[];double bufhigh[];double buflow[];double bufclose[];//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+input ENUM_DRAW_CANDLE_TYPE inpDrawCandleStyle=DRAW_CANDLE_TYPE_1;input color inpClr1 = clrWhite;input color inpClr2 = clrLime;input color inpClr3 = clrRed;//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int OnInit() {//--- Привязываем буферы SetIndexBuffer(0,bufopen,INDICATOR_DATA); SetIndexBuffer(1,bufhigh,INDICATOR_DATA); SetIndexBuffer(2,buflow,INDICATOR_DATA); SetIndexBuffer(3,bufclose,INDICATOR_DATA);//--- Устанавливаем тип графического построения PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);//--- Устанавливаем пустые значения в буферах PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);//--- Устанавливаем цвета индикатора switch(inpDrawCandleStyle) // В зависимости от типа построения свечей { case DRAW_CANDLE_TYPE_1: // Если все свечи одним цветом ////--- Устанавливаем количество цветов стиля (не помогает) //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 1 ); //--- PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1); break; case DRAW_CANDLE_TYPE_2: // Если контуры цветом #1, а тела - цветом #2 ////--- Устанавливаем количество цветов стиля (не помогает) //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 2 ); //--- Устанавливаем цвет индикатора PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2); break; case DRAW_CANDLE_TYPE_3: // Если контуры цветом #1, восх - #2, нисх - #3 ////--- Устанавливаем количество цветов стиля (не помогает) //PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 3 ); //--- Устанавливаем цвет индикатора PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1); PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2); PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,inpClr3); break; default: // Если тип построения не определен Print(__FUNCTION__,": ОШИБКА! Неизвестный тип построения свечей '"+EnumToString(inpDrawCandleStyle)+"'"); return(INIT_FAILED); // Выходим с ошибкой }//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) {//--- if(prev_calculated<=0) for(int i=0; i<rates_total; i++) { bufopen[ i ] = open[ i ]; bufhigh[ i ] = high[ i ]; buflow[i]=low[i]; bufclose[i]=close[i]; }//--- return value of prev_calculated for next call return(rates_total); }//+------------------------------------------------------------------+具体来说--第一种类型(蜡烛+轮廓线第一种颜色)工作正常,它不会切换到其他类型。已添加。如果你通过预处理器指令 设置颜色--一切正常,但也无法改变绘图类型DRAW_CANDLES。 Список изменений в билдах MetaTrader 5 Client Terminal www.mql5.com Автоматическое обновление доступно через систему LiveUpdate:. Errors, bugs, questions 萌新求助,最简单的5日移动均线如何编写?mql4 帮助升级到MetaTrader 5而没有损失 fxsaber 2017.02.10 08:25 #17923 Комбинатор: 是的,我们需要实现一个构造器和复制操作符 不幸的是,这个解决方案只对自定义结构有效。在MqlTradeRequest 的例子中。 Anton 2017.02.10 08:55 #17924 Alexey Kozitsyn:更新后,在绘图类型DRAW_CANDLES中出现了一个错误:我按照这里的描述做了一切:https://www.mql5.com/ru/forum/23/page19#comment_2891050不能通过输入参数的选择来改变构建类型(1-2-3)。代码。 你的代码中有一个错误,你应该使用PlotIndexSetInteger。 ////--- Устанавливаем количество цветов стиля (не помогает) PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 ); TheXpert 2017.02.10 09:00 #17925 fxsaber: 不幸的是,这个解决方案只对自定义结构有效。在MqlTradeRequest 的例子中。 然后在参数中通过引用传递结构。另一个选择是自己制作结构的副本并铸造它,但我们必须考虑如何使它好看。 [删除] 2017.02.10 09:00 #17926 Anton: 你的代码中有一个错误,你应该使用PlotIndexSetInteger。 ////--- Устанавливаем количество цветов стиля (не помогает) PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 ); 天啊,对了,谢谢! fxsaber 2017.02.10 09:04 #17927 Комбинатор: 然后在参数中通过引用传递该结构。另一个选择是自己制作结构和演员的副本,但你必须考虑如何做得漂亮。 我不明白。 TheXpert 2017.02.10 09:17 #17928 fxsaber: 我不明白。struct MyTradeRequest{ // копия MqlTradeRequest // + нужные операторы};// ... MyTradeRequest request = Function();MqlTradeResult = {0};OrderSend((MqlTradeRequest)request, result);// ... 这只是一个想法,可能有错误,我直接在浏览器中写的 fxsaber 2017.02.10 09:25 #17929 Комбинатор:struct MyTradeRequest{ // копия MqlTradeRequest // + нужные операторы};// ... MyTradeRequest request = Function();MqlTradeResult = {0};OrderSend((MqlTradeRequest)request, result);// ... 这只是一个想法,可能有错误,我直接在浏览器中写的 我明白这个意思。但这种选拔方式是行不通的,不是吗? TheXpert 2017.02.10 09:26 #17930 fxsaber: 我明白这个意思。但这种选拔方式是行不通的。 为什么不呢? 1...178617871788178917901791179217931794179517961797179817991800...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么有没有可能写出这样一个函数呢?
更新后,在绘图类型DRAW_CANDLES中出现了一个错误:我按照这里的描述做了一切:https://www.mql5.com/ru/forum/23/page19#comment_2891050
不能通过输入参数的选择来改变构建类型(1-2-3)。代码。
#property indicator_plots 1
#property indicator_buffers 4
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- Перечисление - новые типы отрисовки DRAW_CANDLE
enum ENUM_DRAW_CANDLE_TYPE
{
DRAW_CANDLE_TYPE_1, // Один цвет: #1 - контуры и тела
DRAW_CANDLE_TYPE_2, // Два цвета: #1 - контуры, #2 - тела
DRAW_CANDLE_TYPE_3 // Три цвета: #1 - контуры, #2 - восход., #3 - нисход.
};
//---
double bufopen[];
double bufhigh[];
double buflow[];
double bufclose[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
input ENUM_DRAW_CANDLE_TYPE inpDrawCandleStyle=DRAW_CANDLE_TYPE_1;
input color inpClr1 = clrWhite;
input color inpClr2 = clrLime;
input color inpClr3 = clrRed;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Привязываем буферы
SetIndexBuffer(0,bufopen,INDICATOR_DATA);
SetIndexBuffer(1,bufhigh,INDICATOR_DATA);
SetIndexBuffer(2,buflow,INDICATOR_DATA);
SetIndexBuffer(3,bufclose,INDICATOR_DATA);
//--- Устанавливаем тип графического построения
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_CANDLES);
//--- Устанавливаем пустые значения в буферах
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//--- Устанавливаем цвета индикатора
switch(inpDrawCandleStyle) // В зависимости от типа построения свечей
{
case DRAW_CANDLE_TYPE_1: // Если все свечи одним цветом
////--- Устанавливаем количество цветов стиля (не помогает)
//PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 1 );
//---
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
break;
case DRAW_CANDLE_TYPE_2: // Если контуры цветом #1, а тела - цветом #2
////--- Устанавливаем количество цветов стиля (не помогает)
//PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 2 );
//--- Устанавливаем цвет индикатора
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2);
break;
case DRAW_CANDLE_TYPE_3: // Если контуры цветом #1, восх - #2, нисх - #3
////--- Устанавливаем количество цветов стиля (не помогает)
//PlotIndexGetInteger( 0, PLOT_COLOR_INDEXES, 3 );
//--- Устанавливаем цвет индикатора
PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,inpClr1);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,inpClr2);
PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,inpClr3);
break;
default: // Если тип построения не определен
Print(__FUNCTION__,": ОШИБКА! Неизвестный тип построения свечей '"+EnumToString(inpDrawCandleStyle)+"'");
return(INIT_FAILED); // Выходим с ошибкой
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(prev_calculated<=0)
for(int i=0; i<rates_total; i++)
{
bufopen[ i ] = open[ i ];
bufhigh[ i ] = high[ i ];
buflow[i]=low[i];
bufclose[i]=close[i];
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
具体来说--第一种类型(蜡烛+轮廓线第一种颜色)工作正常,它不会切换到其他类型。
已添加。
如果你通过预处理器指令 设置颜色--一切正常,但也无法改变绘图类型DRAW_CANDLES。
是的,我们需要实现一个构造器和复制操作符
更新后,在绘图类型DRAW_CANDLES中出现了一个错误:我按照这里的描述做了一切:https://www.mql5.com/ru/forum/23/page19#comment_2891050
不能通过输入参数的选择来改变构建类型(1-2-3)。代码。
PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
不幸的是,这个解决方案只对自定义结构有效。在MqlTradeRequest 的例子中。
你的代码中有一个错误,你应该使用PlotIndexSetInteger。
PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
然后在参数中通过引用传递该结构。另一个选择是自己制作结构和演员的副本,但你必须考虑如何做得漂亮。
我不明白。
{
// копия MqlTradeRequest
// + нужные операторы
};
// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
{
// копия MqlTradeRequest
// + нужные операторы
};
// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
我明白这个意思。但这种选拔方式是行不通的。