Erreurs, bugs, questions - page 1793
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Il y a une erreur dans le type de dessin DRAW_CANDLES après sa mise à jour : je fais tout comme décrit ici : https://www.mql5.com/ru/forum/23/page19#comment_2891050.
Impossible de modifier le type de construction (1-2-3) en le sélectionnant via les paramètres d'entrée. Code :
#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);
}
//+------------------------------------------------------------------+
Plus précisément - le premier type (bougies + contours de première couleur) fonctionne bien, il ne passe pas aux autres.
Ajouté :
Si vous définissez les couleurs par le biais d'une directive du préprocesseur, tout va bien, mais il est alors impossible de modifier le type de dessin DRAW_CANDLES.
Oui, nous devons implémenter un constructeur et un opérateur de copie.
Il y a une erreur dans le type de dessin DRAW_CANDLES après sa mise à jour : je fais tout comme décrit ici : https://www.mql5.com/ru/forum/23/page19#comment_2891050.
Impossible de modifier le type de construction (1-2-3) en le sélectionnant via les paramètres d'entrée. Code :
PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
Malheureusement, cette solution ne fonctionne que pour les structures personnalisées. Dans l'exemple de MqlTradeRequest.
Vous avez une erreur dans votre code, vous devriez utiliser PlotIndexSetInteger:
PlotIndexSet Integer( 0, PLOT_COLOR_INDEXES, 3 );
Passez ensuite la structure par référence dans les paramètres. Une autre option consiste à faire votre propre copie de la structure et du casting, mais vous devez réfléchir à la manière de le faire joliment.
Je ne comprends pas.
{
// копия MqlTradeRequest
// + нужные операторы
};
// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
{
// копия MqlTradeRequest
// + нужные операторы
};
// ...
MyTradeRequest request = Function();
MqlTradeResult = {0};
OrderSend((MqlTradeRequest)request, result);
// ...
Je comprends l'idée. Mais ce genre de casting ne fonctionnera pas.
Pourquoi ?
Il y a des strings (deux pièces).
Les développeurs pourraient encore réaliser une solution similaire pour MqlTradeResult si
{
uint retcode; // Код результата операции
ulong deal; // Тикет сделки, если она совершена
ulong order; // Тикет ордера, если он выставлен
double volume; // Объем сделки, подтверждённый брокером
double price; // Цена в сделке, подтверждённая брокером
double bid; // Текущая рыночная цена предложения (цены реквота)
double ask; // Текущая рыночная цена спроса (цены реквота)
string comment; // Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)
uint request_id; // Идентификатор запроса, устанавливается терминалом при отправке
uint retcode_external; // Код ответа внешней торговой системы
};
le champ-chaîne serait fait en dernier. Mais pour MqlTradeRequest, même cela ne servirait à rien.