Le code de programme qui crée l'indicateur ZigZagColor sur le graphique actuel et le supprime après la fermeture de l'EA ressemble à ceci
dans le bloc d'initialisation de l'EA
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
dans le bloc de désinitialisation de l'Expert Advisor
(AVERTISSEMENT pour ceux qui utiliseront ce code ! Cette version du code est un intermédiaire et n'est applicable qu'aux paramètres de l'indicateur Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; à d'autres paramètres, l'indicateur ne sera pas supprimé ! Pour que l'indicateur soit supprimé à d'autres paramètres dans le bloc de désinitialisation, indiquez-les à la place de 80,20,0).
//---ChartIndicatorDelete(0,0,"ZigZag(80,20,0)");
Maintenant, je dois comprendre comment faire pour qu'il supprime l'indicateur après avoir modifié ses paramètres. J'ai essayé la variante suivante :
Il efface l'indicateur pour tous les paramètres, mais lors de la compilation de l'EA, l'éditeur génère 3 avertissements concernant la conversion implicite d'un nombre en chaîne:
implicit conversion from 'number' to 'string' ZigZag_Fibonacci_(M1).mq5 230 38
Je pense que tout est lié à ces valeurs : "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Eh bien, je dois étudier davantage le langage de programmation MQL5.
Le code final qui crée l'indicateur ZigZagColor sur le graphique actuel et le supprime après la fermeture de l'EA ressemble à ceci
dans le bloc d'initialisation de l'EA
en bloc de désinitialisation de l'EA
(AVERTISSEMENT pour ceux qui utiliseront ce code ! Cette version du code est un intermédiaire et n'est applicable qu'aux paramètres de l'indicateur Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; à d'autres paramètres, l'indicateur ne sera pas supprimé ! Pour que l'indicateur soit supprimé à d'autres paramètres dans le bloc de désinitialisation, indiquez-les à la place de 80,20,0).
Maintenant, je dois comprendre comment faire pour qu'il supprime l'indicateur après avoir modifié ses paramètres. J'ai essayé la variante suivante :
Il efface l'indicateur pour tous les paramètres, mais lors de la compilation de l'EA, l'éditeur génère 3 avertissements concernant la conversion implicite d'un nombre en chaîne:
Je pense que tout est lié à ces valeurs : "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Eh bien, je dois étudier davantage le langage de programmation MQL5.
L'avertissement sur une conversion de type implicite. Pour une implémentation stricte, la conversion implicite donne un avertissement.
Vous devriez explicitement taper. Et dans MT5, il s'agit toujours d'une exécution stricte. Dans MT4 vous pouvez sélectionner et ne pas spécifier dans les propriétés #property strict
Je suis moi-même autodidacte - et je copie moi-même les codes disponibles, - Le problème est que je ne sais pas comment expliquer comment sculpter !? - quelque chose en moi me dit comment sculpter.
----------------------------------
Je sais ce que j'ai moulé, il manque là, aussi un chalut pour la ligne.
J'ai ajouté le chalut.
inputstring t0="---- Trailing Line: -----"; //inputushort InpObjTrailingStop = 0; // Obj: Trailing Stop (distance from price to object, in pips)inputushort InpObjTrailingStep = 0; // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)inputstring t1="---- Line Name -----"; //inputstring InpObjUpName = "Имя Линии Up"; // Obj: Up (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InpTradeCommand = UpName_s; // Obj: command: UPinputstring InpObjDownName = "Имя Линии Down"; // Obj: Down (Trailing Horizontal Line) or Trend Line)input ENUM_TRADE_COMMAND InTradeCommand = DownName_b; // Obj: command: DOWNinputushort InpObjStep = 15; // Obj: Step (distance from price to object, in pips)
Avertissement sur la conversion de type non explicite. Pour une exécution directe (stricte), une conversion non explicite donne un avertissement.
Vous devez explicitement exprimer les types. Et dans MT5, il s'agit toujours d'une exécution stricte. Dans MT4 vous pouvez sélectionner et ne pas spécifier dans les propriétés #property strict
Tu as raison, Valery ! En l'état actuel des choses, tout fonctionne comme il se doit. La version finale dans le bloc d'initialisation de l'EA :
//--- create handle of the indicator iCustom
handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
Inp_ZZ_Depth,
Inp_ZZ_Deviation,
Inp_ZZ_Backstep);
ChartIndicatorAdd(ChartID(),0,handle_iCustom);
Oooh, merci beaucoup, avec autant d'informations on peut faire beaucoup de choses...
Je suissur le point de partir en voyage d'affaires, et je pense donc approfondir le matériel qui m'a été donné, mais le codage... Je pourrais aussi le faire sur une feuille de papier, ce serait un bon outil d'entraînement...
Salutations, Roman
Bonjour à tous !
Pendant que Roman est en voyage d'affaires et ne participe pas à ce sujet, je vais continuer à poser des questions sur le langage de programmation MQL5 à la place. J'ai trouvé la bibliothèqueMaximum Percentage of Equity Risk dans CodeBase à l'adresse https://www.mql5.com/ru/code/2142. J'ai décidé d'essayer de mettre en œuvre l'ouverture de positions d'achat et de vente dans un simple Expert Advisor, mais pas avec un lot fixe, mais avec le pourcentage maximum de risque sur l'équité.
Voici le code source (j'ai supprimé toutes les choses inutiles pour me concentrer sur la tâche principale) :
J'y ai inséré le code de la bibliothèque spécifiée. J'ai obtenu le code suivant :
//+------------------------------------------------------------------+//| 11111111111.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#include <Trade\SymbolInfo.mqh> // добавлено из библиотекиinputint TakeProfit=300; //Тейк-профитinputint StopLoss=250; //Стоп-лоссinputdouble lot=0.1; //Лотinputdouble MaximumPercentageRisk=25; //Риск - добавлено из библиотекиbool UseMaximumPercentageRisk=true; // добавлено из библиотекиdouble Ask;
double Bid;
//--- этот блок добавлен из библиотеки//+------------------------------------------------------------------+//| GetLotSize RPTrade |//+------------------------------------------------------------------+double GetLotSize(double lotsize)
{
//--- Gets pair specs
CSymbolInfo symInfo;
int digits_bn=symInfo.Digits();
double points_bn=symInfo.Point();
string symbol_bn=_Symbol;
//--- adjust lot int tmpdecimal=1;
double old_lot=lotsize;
//---if((NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*(MaximumPercentageRisk/100)/1000.0,tmpdecimal)<lotsize)
&& UseMaximumPercentageRisk) //лот подходит под риск ?
{
lotsize=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)
*(MaximumPercentageRisk/100)/1000.0,tmpdecimal); //расчет нового размера лота if(lotsize<SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN)) //размер лота подходит под минимльный размер лота брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_MIN); //Нет! Настройка размера лота под минимальный размер лота брокераPrint(_Symbol," Lot adjusted from ",old_lot," для уменьшения размера разрешенного сервером ",lotsize);
}
else
{
Print(_Symbol," Lot adjusted from ",old_lot,
" to ",lotsize," для соответствия условию максимального риска. В каждой сделке рисковать можно только ",
MaximumPercentageRisk,"% от свободной маржи."); //Да! if(MathAbs(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
-MathRound(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)))>1.0 E-10) //Размер лота подходит под разрешенный шаг брокера ?
{
lotsize=SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP)
*NormalizeDouble(lotsize/SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),0); //НЕТ! Перерасчет размера лота. Print("M-",_Symbol," Warning: Your calculated percentage at risk lot size of was not a multiple of minimal step",
SymbolInfoDouble(symbol_bn,SYMBOL_VOLUME_STEP),". Размер лота изменился до",lotsize);
}
}
}
return(lotsize);
}
//+------------------------------------------------------------------+//| Функция открытия длинной (Long) позиции. |//+------------------------------------------------------------------+int OpenLong(double volume=0.1,
int slippage=10,
string comment="Long",
int magic=0)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
ZeroMemory(my_trade);
my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=Symbol();
my_trade.volume=NormalizeDouble(volume,1);
my_trade.price=NormalizeDouble(Ask,_Digits);
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
my_trade.deviation=slippage;
my_trade.type=ORDER_TYPE_BUY;
my_trade.type_filling=ORDER_FILLING_FOK;
my_trade.comment=comment;
my_trade.magic=magic;
ResetLastError();
if(OrderSend(my_trade,my_trade_result))
{
Print("Код результата операции - ",my_trade_result.retcode);
}
else
{
Print("Код результата операции - ",my_trade_result.retcode);
Print("Ошибка открытия ордера = ",GetLastError());
}
return(0);
}
//+------------------------------------------------------------------+//| функция открытия короткой (Short) позиции. |//| Аналогична функции открытия длинной позиции. |//+------------------------------------------------------------------+
.
.
.
.
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason){}
//+------------------------------------------------------------------+//| Expert OnTick function |//+------------------------------------------------------------------+voidOnTick()
{
. double Open[];
.
.
if(Open[1]>(Open[2]))
{
OpenShort(lot,10,"Short",1234);
return;
}
if((Open[1]<Open[2])
{
OpenLong(lot,10,"Long",1234);
cantrade=false;
return;
}
}
}
return;
}
//+------------------------------------------------------------------+
Mais le conseiller expert continue de travailler avec un lot fixe, c'est-à-dire que le risque n'est pas pris en compte. Veuillez me conseiller sur ce qu'il faut faire pour que le pourcentage de risque de la plus-value soit respecté.
Change Chart and Timeframe Модифицированные скрипты для быстрого изменения графиков и таймфреймов на всех графиках при помощи горячих клавиш. Apply Template Простой скрипт для применения шаблона и/или таймфрейма ко всем открытым графикам. Long position Простой скрипт...
Pendant que Roman est en voyage d'affaires et ne participe pas activement à ce fil de discussion, je vais continuer à poser des questions sur le langage de programmation MQL5 à la place. J'ai trouvé la bibliothèqueMaximum Percentage of Equity Risk dans CodeBase à l'adresse https://www.mql5.com/ru/code/2142. J'ai décidé d'essayer d'implémenter l'ouverture de positions d'achat et de vente dans un simple Expert Advisor, mais pas avec un lot fixe, mais avec le pourcentage maximum de risque sur l'équité.
Voici le code source (j'ai supprimé toutes les choses inutiles pour me concentrer sur la tâche principale) :
J'y ai inséré le code de la bibliothèque spécifiée. J'ai obtenu le code suivant :
Mais le conseiller expert continue de travailler avec un lot fixe, c'est-à-dire que le risque n'est pas pris en compte. Veuillez me conseiller sur ce qu'il faut faire pour que le pourcentage de risque de la plus-value soit respecté.
Mon respect Vladimir.
De la façon dont vous l'avez écrit, c'est comme ça que ça marche. Vous avez besoin d'une ligne, si Lot==0, alors comptez le lot risqué et assignez la valeur du calcul à la variable Lot à la fin.
Au Quaternaire, de cette manière, par le biais d'une variable supplémentaire Lts
bool CheckMoneyForTrade()
{
RefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размераif (Lots > 0) // Если заданы лоты,то
Lts =Lots; // с ними и работаем else// % свободных средств
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Для открытияif(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальнif (Lts*One_Lot > Free) // Лот дороже свободн.
{
Alert(" Not enough money for ", Lts," lots");
Work=false;
return(false) ; // Выход из функции()
}
return(true);
}
C'est ainsi qu'il est rédigé et qu'il fonctionne. Nous avons besoin d'une ligne si Lot==0 alors nous comptons le lot risqué et à la fin nous assignons la valeur du calcul à la variable Lot.
Au Quaternaire, c'est comme ça, par le biais d'une variable supplémentaire Lts.
MERCI BEAUCOUP À TOUS ! !!
Le code de programme qui crée l'indicateur ZigZagColor sur le graphique actuel et le supprime après la fermeture de l'EA ressemble à ceci
dans le bloc d'initialisation de l'EA
dans le bloc de désinitialisation de l'Expert Advisor
(AVERTISSEMENT pour ceux qui utiliseront ce code ! Cette version du code est un intermédiaire et n'est applicable qu'aux paramètres de l'indicateur Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; à d'autres paramètres, l'indicateur ne sera pas supprimé ! Pour que l'indicateur soit supprimé à d'autres paramètres dans le bloc de désinitialisation, indiquez-les à la place de 80,20,0).
Maintenant, je dois comprendre comment faire pour qu'il supprime l'indicateur après avoir modifié ses paramètres. J'ai essayé la variante suivante :
Il efface l'indicateur pour tous les paramètres, mais lors de la compilation de l'EA, l'éditeur génère 3 avertissements concernant la conversion implicite d'un nombre en chaîne:
Je pense que tout est lié à ces valeurs : "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Eh bien, je dois étudier davantage le langage de programmation MQL5.
Merci encore pour votre aide !
Sincèrement, Vladimir.
MERCI BEAUCOUP À TOUS ! !!
Le code final qui crée l'indicateur ZigZagColor sur le graphique actuel et le supprime après la fermeture de l'EA ressemble à ceci
dans le bloc d'initialisation de l'EA
en bloc de désinitialisation de l'EA
(AVERTISSEMENT pour ceux qui utiliseront ce code ! Cette version du code est un intermédiaire et n'est applicable qu'aux paramètres de l'indicateur Inp_ZZ_Depth = 80; Inp_ZZ_Deviation = 20; Inp_ZZ_Backstep = 0; à d'autres paramètres, l'indicateur ne sera pas supprimé ! Pour que l'indicateur soit supprimé à d'autres paramètres dans le bloc de désinitialisation, indiquez-les à la place de 80,20,0).
Maintenant, je dois comprendre comment faire pour qu'il supprime l'indicateur après avoir modifié ses paramètres. J'ai essayé la variante suivante :
Il efface l'indicateur pour tous les paramètres, mais lors de la compilation de l'EA, l'éditeur génère 3 avertissements concernant la conversion implicite d'un nombre en chaîne:
Je pense que tout est lié à ces valeurs : "+Inp_ZZ_Depth+", "+Inp_ZZ_Deviation+","+Inp_ZZ_Backstep+". Eh bien, je dois étudier davantage le langage de programmation MQL5.
Merci encore une fois pour votre aide précieuse !
Sincèrement, Vladimir.
L'avertissement sur une conversion de type implicite. Pour une implémentation stricte, la conversion implicite donne un avertissement.
Vous devriez explicitement taper. Et dans MT5, il s'agit toujours d'une exécution stricte. Dans MT4 vous pouvez sélectionner et ne pas spécifier dans les propriétés #property strict
Je suis moi-même autodidacte - et je copie moi-même les codes disponibles, - Le problème est que je ne sais pas comment expliquer comment sculpter !? - quelque chose en moi me dit comment sculpter.
----------------------------------
Je sais ce que j'ai moulé, il manque là, aussi un chalut pour la ligne.
J'ai ajouté le chalut.
Avertissement sur la conversion de type non explicite. Pour une exécution directe (stricte), une conversion non explicite donne un avertissement.
Vous devez explicitement exprimer les types. Et dans MT5, il s'agit toujours d'une exécution stricte. Dans MT4 vous pouvez sélectionner et ne pas spécifier dans les propriétés #property strict
Tu as raison, Valery ! En l'état actuel des choses, tout fonctionne comme il se doit. La version finale dans le bloc d'initialisation de l'EA :
dans le bloc de désinitialisation de l'EA :
Merci pour le conseil !
Salutations, Vladimir.
Oooh, merci beaucoup, avec autant d'informations on peut faire beaucoup de choses...
Je suissur le point de partir en voyage d'affaires, et je pense donc approfondir le matériel qui m'a été donné, mais le codage... Je pourrais aussi le faire sur une feuille de papier, ce serait un bon outil d'entraînement...
Salutations, Roman
Bonjour à tous !
Pendant que Roman est en voyage d'affaires et ne participe pas à ce sujet, je vais continuer à poser des questions sur le langage de programmation MQL5 à la place. J'ai trouvé la bibliothèque Maximum Percentage of Equity Risk dans CodeBase à l'adresse https://www.mql5.com/ru/code/2142. J'ai décidé d'essayer de mettre en œuvre l'ouverture de positions d'achat et de vente dans un simple Expert Advisor, mais pas avec un lot fixe, mais avec le pourcentage maximum de risque sur l'équité.
Voici le code source (j'ai supprimé toutes les choses inutiles pour me concentrer sur la tâche principale) :
J'y ai inséré le code de la bibliothèque spécifiée. J'ai obtenu le code suivant :
Mais le conseiller expert continue de travailler avec un lot fixe, c'est-à-dire que le risque n'est pas pris en compte. Veuillez me conseiller sur ce qu'il faut faire pour que le pourcentage de risque de la plus-value soit respecté.
Salutations, Vladimir.
Bonne journée à vous tous !
Pendant que Roman est en voyage d'affaires et ne participe pas activement à ce fil de discussion, je vais continuer à poser des questions sur le langage de programmation MQL5 à la place. J'ai trouvé la bibliothèque Maximum Percentage of Equity Risk dans CodeBase à l'adresse https://www.mql5.com/ru/code/2142. J'ai décidé d'essayer d'implémenter l'ouverture de positions d'achat et de vente dans un simple Expert Advisor, mais pas avec un lot fixe, mais avec le pourcentage maximum de risque sur l'équité.
Voici le code source (j'ai supprimé toutes les choses inutiles pour me concentrer sur la tâche principale) :
J'y ai inséré le code de la bibliothèque spécifiée. J'ai obtenu le code suivant :
Mais le conseiller expert continue de travailler avec un lot fixe, c'est-à-dire que le risque n'est pas pris en compte. Veuillez me conseiller sur ce qu'il faut faire pour que le pourcentage de risque de la plus-value soit respecté.
Mon respect Vladimir.
De la façon dont vous l'avez écrit, c'est comme ça que ça marche. Vous avez besoin d'une ligne, si Lot==0, alors comptez le lot risqué et assignez la valeur du calcul à la variable Lot à la fin.
Au Quaternaire, de cette manière, par le biais d'une variable supplémentaire Lts
Messieurs, le sujet entier est une page de discussion, le reste est du code. Ne suffit-il pas d'insérer les codes?
Comment aider alors ?
Comment aider alors ?
Ne mettez que ce qui est demandé
C'est ainsi qu'il est rédigé et qu'il fonctionne. Nous avons besoin d'une ligne si Lot==0 alors nous comptons le lot risqué et à la fin nous assignons la valeur du calcul à la variable Lot.
Au Quaternaire, c'est comme ça, par le biais d'une variable supplémentaire Lts.
Merci, Valeriy, je vais essayer dans la soirée !
Sincèrement, Vladimir.