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
Ça donne quelque chose comme ça :
Bonjour, Quelqu'un peut-il suggérer une solution à ce problème ? Il existe un code avec entrée sur M15, mais le signal de H1 est pris en compte. Alors qu'il y a un signal sur H1, sur M15 l'indicateur donne plusieurs signaux. La question est de savoir comment le limiter à un seul (c'est-à-dire le premier signal).
k=0 ;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates() ;
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0 ;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++ ;
}
if( stM1 >= 80 && stM0 < 80 && stH0 < 30 && k==0 && opp != Time[0]) // vente
J'ai écrit un petit panneau d'information :
extern color PanelBackgroundColor = Black;
extern color PanelTextColor = White;
double MaxDD;
int OnInit()
{
//--- indicator buffers mapping
ObjectCreate("Background", OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSet("Background", OBJPROP_CORNER, 0);
ObjectSet("Background", OBJPROP_XDISTANCE, 5);
ObjectSet("Background", OBJPROP_YDISTANCE, 35);
ObjectSet("Background", OBJPROP_XSIZE, 215);
ObjectSet("Background", OBJPROP_YSIZE, 220);
ObjectSet("Background", OBJPROP_BGCOLOR, PanelBackgroundColor);
ObjectCreate("Account information", OBJ_LABEL, 0, 0, 0);
ObjectSet("Account information", OBJPROP_CORNER, 0);
ObjectSet("Account information", OBJPROP_XDISTANCE, 15);
ObjectSet("Account information", OBJPROP_YDISTANCE, 45);
ObjectSetText("Account information","=====Account information=====",10,"Arial",PanelTextColor);
ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
ObjectSet("Balance", OBJPROP_CORNER, 0);
ObjectSet("Balance", OBJPROP_XDISTANCE, 15);
ObjectSet("Balance", OBJPROP_YDISTANCE, 60);
ObjectCreate("Profit/DD", OBJ_LABEL, 0, 0, 0);
ObjectSet("Profit/DD", OBJPROP_CORNER, 0);
ObjectSet("Profit/DD", OBJPROP_XDISTANCE, 15);
ObjectSet("Profit/DD", OBJPROP_YDISTANCE, 75);
ObjectCreate("Max DD", OBJ_LABEL, 0, 0, 0);
ObjectSet("Max DD", OBJPROP_CORNER, 0);
ObjectSet("Max DD", OBJPROP_XDISTANCE, 15);
ObjectSet("Max DD", OBJPROP_YDISTANCE, 90);
ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
ObjectSet("Equity", OBJPROP_CORNER, 0);
ObjectSet("Equity", OBJPROP_XDISTANCE, 15);
ObjectSet("Equity", OBJPROP_YDISTANCE, 105);
ObjectCreate("Free margin", OBJ_LABEL, 0, 0, 0);
ObjectSet("Free margin", OBJPROP_CORNER, 0);
ObjectSet("Free margin", OBJPROP_XDISTANCE, 15);
ObjectSet("Free margin", OBJPROP_YDISTANCE, 120);
ObjectCreate("Pair information", OBJ_LABEL, 0, 0, 0);
ObjectSet("Pair information", OBJPROP_CORNER, 0);
ObjectSet("Pair information", OBJPROP_XDISTANCE, 15);
ObjectSet("Pair information", OBJPROP_YDISTANCE, 150);
ObjectSetText("Pair information","=======Pair information======",10,"Arial",PanelTextColor);
ObjectCreate("Pair", OBJ_LABEL, 0, 0, 0);
ObjectSet("Pair", OBJPROP_CORNER, 0);
ObjectSet("Pair", OBJPROP_XDISTANCE, 15);
ObjectSet("Pair", OBJPROP_YDISTANCE, 165);
ObjectSetText("Pair","Pair: "+Symbol(),10,"Arial",PanelTextColor);
ObjectCreate("Margin required", OBJ_LABEL, 0, 0, 0);
ObjectSet("Margin required", OBJPROP_CORNER, 0);
ObjectSet("Margin required", OBJPROP_XDISTANCE, 15);
ObjectSet("Margin required", OBJPROP_YDISTANCE, 180);
ObjectCreate("Price pips", OBJ_LABEL, 0, 0, 0);
ObjectSet("Price pips", OBJPROP_CORNER, 0);
ObjectSet("Price pips", OBJPROP_XDISTANCE, 15);
ObjectSet("Price pips", OBJPROP_YDISTANCE, 195);
ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);
ObjectSet("Spread", OBJPROP_CORNER, 0);
ObjectSet("Spread", OBJPROP_XDISTANCE, 15);
ObjectSet("Spread", OBJPROP_YDISTANCE, 210);
ObjectCreate("Leverage", OBJ_LABEL, 0, 0, 0);
ObjectSet("Leverage", OBJPROP_CORNER, 0);
ObjectSet("Leverage", OBJPROP_XDISTANCE, 15);
ObjectSet("Leverage", OBJPROP_YDISTANCE, 225);
//---
return(INIT_SUCCEEDED);
}
void start()
{
//Расчет максимальной просадки
if (AccountProfit()<0)
{
if (AccountProfit()<MaxDD)
MaxDD=AccountProfit();
}
ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(),2)+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
ObjectSetText("Equity","Equity: "+DoubleToString (AccountEquity(),2),10,"Arial",PanelTextColor);
ObjectSetText("Free margin","Free margin: "+DoubleToString (AccountFreeMargin(),2),10,"Arial",PanelTextColor);
ObjectSetText("Margin required","Margin required: "+DoubleToString(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2)+" $",10,"Arial",PanelTextColor);
ObjectSetText("Price pips","Price pips: "+DoubleToString(MarketInfo(Symbol(), MODE_TICKVALUE), 2)+" $",10,"Arial",PanelTextColor);
ObjectSetText("Spread","Spread: "+DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),2),10,"Arial",PanelTextColor);
ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}
Tout fonctionne, affiche correctement les informations, mais dès que l'on redémarre le terminal, le panneau cesse de fonctionner (écrit que le solde est à 0 et le reste des informations cesse de se mettre à jour et se fige sur une position, raccroche simplement). Comment lutter contre cela ?
Une capture d'écran est jointe :J'ai écrit un petit panneau d'information :
extern color PanelBackgroundColor = Black;
extern color PanelTextColor = White;
double MaxDD;
int OnInit()
{
//--- indicator buffers mapping
ObjectCreate("Background", OBJ_RECTANGLE_LABEL, 0, 0, 0);
ObjectSet("Background", OBJPROP_CORNER, 0);
ObjectSet("Background", OBJPROP_XDISTANCE, 5);
ObjectSet("Background", OBJPROP_YDISTANCE, 35);
ObjectSet("Background", OBJPROP_XSIZE, 215);
ObjectSet("Background", OBJPROP_YSIZE, 220);
ObjectSet("Background", OBJPROP_BGCOLOR, PanelBackgroundColor);
ObjectCreate("Account information", OBJ_LABEL, 0, 0, 0);
ObjectSet("Account information", OBJPROP_CORNER, 0);
ObjectSet("Account information", OBJPROP_XDISTANCE, 15);
ObjectSet("Account information", OBJPROP_YDISTANCE, 45);
ObjectSetText("Account information","=====Account information=====",10,"Arial",PanelTextColor);
ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
ObjectSet("Balance", OBJPROP_CORNER, 0);
ObjectSet("Balance", OBJPROP_XDISTANCE, 15);
ObjectSet("Balance", OBJPROP_YDISTANCE, 60);
ObjectCreate("Profit/DD", OBJ_LABEL, 0, 0, 0);
ObjectSet("Profit/DD", OBJPROP_CORNER, 0);
ObjectSet("Profit/DD", OBJPROP_XDISTANCE, 15);
ObjectSet("Profit/DD", OBJPROP_YDISTANCE, 75);
ObjectCreate("Max DD", OBJ_LABEL, 0, 0, 0);
ObjectSet("Max DD", OBJPROP_CORNER, 0);
ObjectSet("Max DD", OBJPROP_XDISTANCE, 15);
ObjectSet("Max DD", OBJPROP_YDISTANCE, 90);
ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
ObjectSet("Equity", OBJPROP_CORNER, 0);
ObjectSet("Equity", OBJPROP_XDISTANCE, 15);
ObjectSet("Equity", OBJPROP_YDISTANCE, 105);
ObjectCreate("Free margin", OBJ_LABEL, 0, 0, 0);
ObjectSet("Free margin", OBJPROP_CORNER, 0);
ObjectSet("Free margin", OBJPROP_XDISTANCE, 15);
ObjectSet("Free margin", OBJPROP_YDISTANCE, 120);
ObjectCreate("Pair information", OBJ_LABEL, 0, 0, 0);
ObjectSet("Pair information", OBJPROP_CORNER, 0);
ObjectSet("Pair information", OBJPROP_XDISTANCE, 15);
ObjectSet("Pair information", OBJPROP_YDISTANCE, 150);
ObjectSetText("Pair information","=======Pair information======",10,"Arial",PanelTextColor);
ObjectCreate("Pair", OBJ_LABEL, 0, 0, 0);
ObjectSet("Pair", OBJPROP_CORNER, 0);
ObjectSet("Pair", OBJPROP_XDISTANCE, 15);
ObjectSet("Pair", OBJPROP_YDISTANCE, 165);
ObjectSetText("Pair","Pair: "+Symbol(),10,"Arial",PanelTextColor);
ObjectCreate("Margin required", OBJ_LABEL, 0, 0, 0);
ObjectSet("Margin required", OBJPROP_CORNER, 0);
ObjectSet("Margin required", OBJPROP_XDISTANCE, 15);
ObjectSet("Margin required", OBJPROP_YDISTANCE, 180);
ObjectCreate("Price pips", OBJ_LABEL, 0, 0, 0);
ObjectSet("Price pips", OBJPROP_CORNER, 0);
ObjectSet("Price pips", OBJPROP_XDISTANCE, 15);
ObjectSet("Price pips", OBJPROP_YDISTANCE, 195);
ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);
ObjectSet("Spread", OBJPROP_CORNER, 0);
ObjectSet("Spread", OBJPROP_XDISTANCE, 15);
ObjectSet("Spread", OBJPROP_YDISTANCE, 210);
ObjectCreate("Leverage", OBJ_LABEL, 0, 0, 0);
ObjectSet("Leverage", OBJPROP_CORNER, 0);
ObjectSet("Leverage", OBJPROP_XDISTANCE, 15);
ObjectSet("Leverage", OBJPROP_YDISTANCE, 225);
//---
return(INIT_SUCCEEDED);
}
void start()
{
//Расчет максимальной просадки
if (AccountProfit()<0)
{
if (AccountProfit()<MaxDD)
MaxDD=AccountProfit();
}
ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
ObjectSetText("Profit/DD","Profit/DD: "+DoubleToString (AccountProfit(),2)+" ("+DoubleToString((AccountProfit()*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
ObjectSetText("Equity","Equity: "+DoubleToString (AccountEquity(),2),10,"Arial",PanelTextColor);
ObjectSetText("Free margin","Free margin: "+DoubleToString (AccountFreeMargin(),2),10,"Arial",PanelTextColor);
ObjectSetText("Margin required","Margin required: "+DoubleToString(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 2)+" $",10,"Arial",PanelTextColor);
ObjectSetText("Price pips","Price pips: "+DoubleToString(MarketInfo(Symbol(), MODE_TICKVALUE), 2)+" $",10,"Arial",PanelTextColor);
ObjectSetText("Spread","Spread: "+DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),2),10,"Arial",PanelTextColor);
ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}
Tout fonctionne, affiche correctement les informations, mais lorsque vous redémarrez le terminal, le panneau ne fonctionne plus (il écrit que le solde est à 0, et le reste des informations ne se met plus à jour et se fige sur une position, raccroche simplement). Comment y faire face ?
Je joins une capture d'écran :Problème similaire discuté il n'y a pas si longtemps, avez-vous regardé l'onglet journal ou les conseillers experts, je peux dire avec 100% de certitude que vous avez une erreur de division par zéro dans ces lignes.
ObjectSetText("Max DD","Max DD: "+DoubleToString (MaxDD,2)+" ("+DoubleToString((MaxDD*100)/AccountBalance(),2)+"%)",10,"Arial",PanelTextColor);
...
J'ai écrit un petit panneau d'information :
{
//Расчет максимальной просадки
if (AccountProfit()<0)
{
if (AccountProfit()<MaxDD)
MaxDD=AccountProfit();
}
ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
...
ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}
Tout fonctionne, affiche correctement les informations, mais lorsque vous redémarrez le terminal, le panneau ne fonctionne plus (il écrit que le solde est à 0, et le reste des informations ne se met plus à jour et se fige sur une position, raccroche simplement). Comment y faire face ?
Capture d'écran jointe :Essayez comme ça :
{
if (AccountBalance()<5) return; // <<< if (AccountBalance()==0) return;
//Расчет максимальной просадки
if (AccountProfit()<0)
{
if (AccountProfit()<MaxDD)
MaxDD=AccountProfit();
}
ObjectSetText("Balance","Balance: "+DoubleToString (AccountBalance(),2)+" "+AccountCurrency(),10,"Arial",PanelTextColor);
...
ObjectSetText("Leverage","Leverage: 1:"+IntegerToString(AccountLeverage(), 0),10,"Arial",PanelTextColor);
}
J'ai écrit un petit panneau d'information :
extern color PanelBackgroundColor = Black;
extern color PanelTextColor = White;
Tout fonctionne, les informations s'affichent correctement, mais dès que le terminal est redémarré, le panneau cesse de fonctionner (il indique que le solde est à 0, et le reste des informations cesse de se mettre à jour et se fige dans une position, il se fige simplement). Comment y faire face?
Capture d'écran ci-joint :J'ai fait un peu de magie sur votre panneau. J'ai eu ce code, j'ai éliminé l'erreur de division par zéro .
//| test_panel.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
sinput string Display= NULL ; //Настройки отображения
input color PanelBackgroundColor = clrBlack ;
input color PanelTextColor = clrWhite ;
input color ColorMinus= clrRed ;
input color ColorPlus= clrBlueViolet ;
input color ColorZero= clrMediumAquamarine ;
double balans= 0.0 ;
double profit= 0.0 ;
double profit_dd_procent= 0.0 ;
double MaxDD= 0.0 ;
double MaxDD_procent= 0.0 ;
double Equity= 0.0 ;
double Freemargin= 0.0 ;
double Marginrequired= 0.0 ;
double Pricepips= 0.0 ;
int Spread= 0 ;
int Leverage= 0 ;
string symbol= NULL ;
string currency= NULL ;
int X= 15 ;
int Y= 45 ;
int size= 15 ;
int x_sdvig= 150 ;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
Refresh();
Panel();
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//---
RectLabelDelete( 0 , "Background" );
LabelDelete( 0 , "Account information" );
LabelDelete( 0 , "Balance" );
LabelDelete( 0 , "Balance value" );
LabelDelete( 0 , "Profit/DD" );
LabelDelete( 0 , "Profit/DD value" );
LabelDelete( 0 , "Max DD" );
LabelDelete( 0 , "Max DD value" );
LabelDelete( 0 , "Equity" );
LabelDelete( 0 , "Equity value" );
LabelDelete( 0 , "Free margin" );
LabelDelete( 0 , "Free margin value" );
LabelDelete( 0 , "Pair information" );
LabelDelete( 0 , "Pair" );
LabelDelete( 0 , "Pair value" );
LabelDelete( 0 , "Margin required" );
LabelDelete( 0 , "Margin required value" );
LabelDelete( 0 , "Price pips" );
LabelDelete( 0 , "Price pips value" );
LabelDelete( 0 , "Spread" );
LabelDelete( 0 , "Spread value" );
LabelDelete( 0 , "Leverage" );
LabelDelete( 0 , "Leverage value" );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
Refresh();
Panel();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Refresh()
{
symbol= _Symbol ;
currency= AccountInfoString ( ACCOUNT_CURRENCY );
balans = AccountInfoDouble ( ACCOUNT_BALANCE );
profit = AccountInfoDouble ( ACCOUNT_PROFIT );
Equity = AccountInfoDouble ( ACCOUNT_EQUITY );
Freemargin= AccountInfoDouble ( ACCOUNT_MARGIN_FREE );
Marginrequired= MarketInfo (symbol, MODE_MARGINREQUIRED );
Pricepips= SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_VALUE );
Leverage=( int ) AccountInfoInteger ( ACCOUNT_LEVERAGE );
double ask= SymbolInfoDouble (symbol, SYMBOL_ASK );
double bid= SymbolInfoDouble (symbol, SYMBOL_BID );
double point= SymbolInfoDouble (symbol, SYMBOL_POINT );
Spread=( int ) SymbolInfoInteger (symbol, SYMBOL_SPREAD );
if (Spread== 0 )Spread= int ((ask-bid)/point);
//Расчет максимальной просадки
if (profit< 0 )
if (profit<MaxDD)
MaxDD=profit;
if (balans!= 0 )
{
profit_dd_procent=profit* 100.0 /balans;
MaxDD_procent=MaxDD* 100.0 /balans;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Panel()
{
RectLabelCreate( 0 , "Background" , 0 , 5 , 35 , 300 , 230 ,PanelBackgroundColor);
LabelCreate( 0 , "Account information" , 0 ,X,Y, "=====Account information=====" ,PanelTextColor);Y+=size;
LabelCreate( 0 , "Balance" , 0 ,X,Y, "Balance (" +currency+ "):" ,PanelTextColor);
LabelCreate( 0 , "Balance value" , 0 ,x_sdvig,Y, DoubleToString (balans, 2 ),ColorValue(balans));Y+=size;
LabelCreate( 0 , "Profit/DD" , 0 ,X,Y, "Profit/DD (" +currency+ " / %):" ,PanelTextColor);
LabelCreate( 0 , "Profit/DD value" , 0 ,x_sdvig,Y, DoubleToString (profit, 2 )+ " / " + DoubleToString (profit_dd_procent, 2 ),ColorValue(profit));Y+=size;
LabelCreate( 0 , "Max DD" , 0 ,X,Y, "Max DD (" +currency+ " / %):" ,PanelTextColor);
LabelCreate( 0 , "Max DD value" , 0 ,x_sdvig,Y, DoubleToString (MaxDD, 2 )+ " / " + DoubleToString (MaxDD_procent, 2 ),ColorValue(MaxDD));Y+=size;
LabelCreate( 0 , "Equity" , 0 ,X,Y, "Equity (" +currency+ "):" ,PanelTextColor);
LabelCreate( 0 , "Equity value" , 0 ,x_sdvig,Y,( string )Equity,ColorValue(Equity));Y+=size;
LabelCreate( 0 , "Free margin" , 0 ,X,Y, "Free margin (" +currency+ "):" ,PanelTextColor);
LabelCreate( 0 , "Free margin value" , 0 ,x_sdvig,Y,( string )Freemargin,ColorValue(Freemargin));Y+=size;Y+=size;
LabelCreate( 0 , "Pair information" , 0 ,X,Y, "=======Pair information======" ,PanelTextColor);Y+=size;
LabelCreate( 0 , "Pair" , 0 ,X,Y, "Pair:" ,PanelTextColor);
LabelCreate( 0 , "Pair value" , 0 ,x_sdvig,Y,symbol,PanelTextColor);Y+=size;
LabelCreate( 0 , "Margin required" , 0 ,X,Y, "Margin required (" +currency+ "):" ,PanelTextColor);
LabelCreate( 0 , "Margin required value" , 0 ,x_sdvig,Y,( string )Marginrequired,ColorValue(Marginrequired));Y+=size;
LabelCreate( 0 , "Price pips" , 0 ,X,Y, "Price pips (" +currency+ "):" ,PanelTextColor);
LabelCreate( 0 , "Price pips value" , 0 ,x_sdvig,Y,( string )Pricepips,ColorValue(Pricepips));Y+=size;
LabelCreate( 0 , "Spread" , 0 ,X,Y, "Spread:" ,PanelTextColor);
LabelCreate( 0 , "Spread value" , 0 ,x_sdvig,Y,( string )Spread,ColorValue(Spread));Y+=size;
LabelCreate( 0 , "Leverage" , 0 ,X,Y, "Leverage:" ,PanelTextColor);
LabelCreate( 0 , "Leverage value" , 0 ,x_sdvig,Y, "1:" +( string )Leverage,PanelTextColor);
}
//+------------------------------------------------------------------+
//| Создает прямоугольную метку |
//+------------------------------------------------------------------+
bool RectLabelCreate( const long chart_ID= 0 , // ID графика
const string name= "RectLabel" , // имя метки
const int sub_window= 0 , // номер подокна
const int x= 0 , // координата по оси X
const int y= 0 , // координата по оси Y
const int width= 50 , // ширина
const int height= 18 , // высота
const color back_clr= C'236,233,216' , // цвет фона
const ENUM_BORDER_TYPE border= BORDER_SUNKEN , // тип границы
const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // угол графика для привязки
const color clr= clrRed , // цвет плоской границы (Flat)
const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль плоской границы
const int line_width= 1 , // толщина плоской границы
const bool back= false , // на заднем плане
const bool selection= false , // выделить для перемещений
const bool hidden= true , // скрыт в списке объектов
const long z_order= 0 ) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError ();
//--- создадим прямоугольную метку
if ( ObjectFind (chart_ID,name)!=sub_window)
{
if (! ObjectCreate (chart_ID,name, OBJ_RECTANGLE_LABEL ,sub_window, 0 , 0 ))
{
Print ( __FUNCTION__ ,
": не удалось создать прямоугольную метку! Код ошибки = " , GetLastError ());
return ( false );
}
}
//--- установим координаты метки
ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- установим размеры метки
ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);
ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
//--- установим цвет фона
ObjectSetInteger (chart_ID,name, OBJPROP_BGCOLOR ,back_clr);
//--- установим тип границы
ObjectSetInteger (chart_ID,name, OBJPROP_BORDER_TYPE ,border);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- установим цвет плоской рамки (в режиме Flat)
ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль линии плоской рамки
ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину плоской границы
ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,line_width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Создает текстовую метку |
//+------------------------------------------------------------------+
bool LabelCreate( const long chart_ID= 0 , // ID графика
const string name= "Label" , // имя метки
const int sub_window= 0 , // номер подокна
const int x= 0 , // координата по оси X
const int y= 0 , // координата по оси Y
const string text= "Label" , // текст
const color clr= clrRed , // цвет
const string font= "Arial" , // шрифт
const int font_size= 10 , // размер шрифта
const double angle= 0.0 , // наклон текста
const ENUM_BASE_CORNER corner= CORNER_LEFT_UPPER , // угол графика для привязки
const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // способ привязки
const bool back= false , // на заднем плане
const bool selection= false , // выделить для перемещений
const bool hidden= true , // скрыт в списке объектов
const long z_order= 0 ) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError ();
//--- создадим текстовую метку
if ( ObjectFind (chart_ID,name)!=sub_window)
{
if (! ObjectCreate (chart_ID,name, OBJ_LABEL ,sub_window, 0 , 0 ))
{
Print ( __FUNCTION__ ,
": не удалось создать текстовую метку! Код ошибки = " , GetLastError ());
return ( false );
}
}
//--- установим координаты метки
ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
//--- установим текст
ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
//--- установим шрифт текста
ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
//--- установим размер шрифта
ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
//--- установим угол наклона текста
ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle);
//--- установим способ привязки
ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет
ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Изменяет текст объекта |
//+------------------------------------------------------------------+
bool LabelTextChange( const long chart_ID= 0 , // ID графика
const string name= "Label" , // имя объекта
const string text= "Text" ) // текст
{
//--- сбросим значение ошибки
ResetLastError ();
//--- изменим текст объекта
if (! ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text))
{
Print ( __FUNCTION__ ,
": не удалось изменить текст! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Удаляет текстовую метку |
//+------------------------------------------------------------------+
bool LabelDelete( const long chart_ID= 0 , // ID графика
const string name= "Label" ) // имя метки
{
//--- сбросим значение ошибки
ResetLastError ();
//--- удалим метку
if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": не удалось удалить текстовую метку! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
//| Удаляет прямоугольную метку |
//+------------------------------------------------------------------+
bool RectLabelDelete( const long chart_ID= 0 , // ID графика
const string name= "RectLabel" ) // имя метки
{
//--- сбросим значение ошибки
ResetLastError ();
//--- удалим метку
if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": не удалось удалить прямоугольную метку! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение
return ( true );
}
//+------------------------------------------------------------------+
color ColorValue( double value)
{
if (value> 0 ) return (ColorPlus);
if (value< 0 ) return (ColorMinus);
return (ColorZero);
}
//+------------------------------------------------------------------+
....
J'ai fait un peu de travail sur ton tableau de bord. J'ai ce code, j'ai éliminé l'erreur de division par zéro.
//| test_panel.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
....
Eh bien, c'est sous la forme d'un EA, et très probablement vous avez besoin d'un indicateur, parce qu'après avoir installé cet EA, vous ne pouvez plus installer un EA, et vous devez choisir, ou installer un EA de trading, ou un panneau EA =)
Eh bien, ceci est sous la forme d'un EA, et vous avez très probablement besoin d'un indicateur, car après avoir installé cet EA, il ne sera plus possible d'installer un EA, et vous devrez choisir, soit d'installer un EA de trading, soit un panneau EA =)
Il n'est pas très difficile de copier ce code dans un indicateur. Rien n'indiquait dans la question qu'il écrivait l'indicateur.
Dans le testeur de stratégie, allez à l'onglet "Optimisation" -
C'est ici que les résultats de l'optimisation seront affichés.