Je propose de discuter du sujet suivant : Quelle est la pertinence de trader sur plusieurs symboles et / ou horizons temporels au sein d'un conseiller expert ?
Je suis actuellement assis et je réfléchis - devrais-je poster symbol_lib et un modèle de conseiller expert, conçu dans ce but précis =) et je pense qu'il n'y a pas besoin... Si je négocie sur différents comptes, je devrai toujours utiliser plusieurs terminaux, et si je négocie sur un seul compte, j'ouvrirai simplement plusieurs fenêtres. Et il y aurait moins de confusion, il semble...
Il sera intéressant d'entendre les opinions et les arguments à leur sujet ;)
En ce qui concerne le stop suiveur, vous pourriez faire ceci
int CurPrice_p=Bid/Point; //текущая цена в пунктах
int CurSLoss=OrderStopLoss( )/Point; //текущий стоплосс в пунктах
int TS=40; //значение трейлингстопа в пунктах
if(TS>=5)
{
int TStep=2; //минимальный шаг трейлинг стопа
if(TStep<1) TStep=1; //проверка шага трейлинга
{
if(MathAbs(CurPrice_p-CurSLOss)>=TS+TStep)
{
if(CurPrice_p>CurSLOss)
{
double NewSLoss=(CurPrice_p-TS)*Point;
изменить уровень стоплосс ордера на новый
}
if(CurPrice_p>CurSLOss)
{
NewSLoss=(CurPrice_p+TS)*Point;
изменить уровень стоплосс ордера на новый
}
}
}
}
En ce qui concerne le trailing stop, nous devrions peut-être faire ce qui suit
c'est une idée ... c'est plus qu'une pensée - c'est une idée ;)) Le lendemain, je passerai en revue les erreurs qui ont été collectées par le conseiller expert et je réfléchirai à la mise en œuvre de fonctions de trading. Je vais partager avec vous la semaine prochaine ;)
Je vous propose de discuter du sujet suivant : Dans quelle mesure est-il pertinent d'effectuer des transactions sur plusieurs sceaux et/ou horizons temporels au sein d'un même conseiller expert ?
Suite au vote ( 1 contre (komposter), 0 en faveur, le reste s'est abstenu ), j'ai décidé de ne pas poster de déchets de trading multi-symboles dans ce fil =) Si quelqu'un est toujours intéressé, écrivez et partagez la bibliothèque ;-|.
Voici un petit utilitaire, à mon avis utile, pour l'analyse visuelle des positions après une exécution de backtest. Cette idée sera peut-être développée pour l'analyse en ligne de l'historique des transactions et l'analyse des déclarations d'autres personnes. A utiliser : 1. Inscrivez ce fichier avec l'extension mqh, Tracert.mqh dans le dossier experts\include\ 2. Ajouter la ligne #include <Tracert.mqh>
#property copyright "Rosh, conversed only" #property link
3. Insérer la fonction SetTrace() au tout début du bloc start() ;
int start() { int ticket, total,totalExpert ; //------------------------------------------------------ //pour simplifier et accélérer le code, sauvegardons les données des indicateurs nécessaires // dans des variables temporaires SetTrace() ;
4. Après l'exécution de l'EA, ouvrez le fichier et obtenez quelque chose comme ceci :
Le code de l'utilitaire lui-même :
//+------------------------------------------------------------------+
//| Tracert.mq4 |
//| Rosh |
//| http://forexsystems.ru/phpBB/index.php |
//+------------------------------------------------------------------+
#property copyright "Rosh"
#property link "http://forexsystems.ru/phpBB/index.php"
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
double tr_AOPLong,tr_AOPShort;
double tr_LongLots,tr_ShortLots;
int tr_CurrLongOrders,tr_CurrShortOrders;
int tr_Total,tr_Counter;
int tr_PrevLongOrders,tr_PrevShortOrders;
int tr_CurrTotalOpenedOrders,tr_PrevTotalOpenedOrders;
double tr_CurrBalance,tr_PrevCurrBalance;
color tr_ProfitColor=Lime, tr_LossColor=DeepPink,tr_LongAOPColor=Blue,tr_ShortAOPColor=Red, tr_CurrCloseColor;
int tr_CloseLabelArrow=108, tr_AOPLabelArrow=159;
bool tr_CloseLong,tr_CloseShort;
double tr_CloseLabelPrice;
int tr_CloseLabelShift=20;
int tr_CounterCloseLabel=0,tr_CounterAOPLabel=0;
int tr_Bars;
void SetTrace()
{
//----
if (IsTesting()&&(tr_Bars!=Bars))
{
tr_CloseLong=false;
tr_CloseShort=false;
tr_AOPLong=0.0;
tr_AOPShort=0.0;
tr_LongLots=0.0;
tr_ShortLots=0.0;
tr_CloseLabelShift=iATR(NULL,0,50,1)*3.0/10.0/Point;
if (tr_CurrBalance==0.0)
{
tr_CurrBalance=AccountBalance();
tr_PrevCurrBalance=AccountBalance();
}
//----------------Проверка открытых позиций ---------------------------
tr_CurrLongOrders=0;
tr_CurrShortOrders=0;
tr_CurrTotalOpenedOrders=0;
tr_Total=OrdersTotal();
if (tr_Total>0)// есть открытые позиции
{
for (tr_Counter=0;tr_Counter<tr_Total;tr_Counter++)// подсчет открытых позиций
{
OrderSelect(tr_Counter, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==OP_BUY)
{
tr_CurrLongOrders++;
tr_AOPLong=tr_AOPLong+OrderLots()*OrderOpenPrice();
tr_LongLots=tr_LongLots+OrderLots();
}
if (OrderType()==OP_SELL)
{
tr_CurrShortOrders++;
tr_AOPShort=tr_AOPShort+OrderLots()*OrderOpenPrice();
tr_ShortLots=tr_ShortLots+OrderLots();
}
}// подсчет открытых позиций
//--------------- усреднение ---------------------
if (tr_CurrLongOrders>0) tr_AOPLong=tr_AOPLong/tr_LongLots;
if (tr_CurrShortOrders>0)tr_AOPShort=tr_AOPShort/tr_ShortLots;
//--------------- усреднение ---------------------
if (tr_AOPLong>0.0)
{
ObjectCreate("AOP"+tr_CounterAOPLabel,OBJ_ARROW,0,Time[1],tr_AOPLong);// не совсем корректно, но пока пойдет
ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_ARROWCODE,tr_AOPLabelArrow);
ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_COLOR,tr_LongAOPColor);
tr_CounterAOPLabel++;
}
if (tr_AOPShort>0.0)
{
ObjectCreate("AOP"+tr_CounterAOPLabel,OBJ_ARROW,0,Time[1],tr_AOPShort);// не совсем корректно, но пока пойдет
ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_ARROWCODE,tr_AOPLabelArrow);
ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_COLOR,tr_ShortAOPColor);
tr_CounterAOPLabel++;
}
// Print("Long=",tr_CurrLongOrders," tr_AOPLong=",tr_AOPLong," *** Short=",tr_CurrShortOrders," tr_AOPShort=",tr_AOPShort);
tr_CurrTotalOpenedOrders=tr_CurrLongOrders+tr_CurrShortOrders;
if ((tr_CurrTotalOpenedOrders!=tr_PrevTotalOpenedOrders)||(tr_PrevLongOrders!=tr_CurrLongOrders)||(tr_PrevShortOrders!=tr_CurrShortOrders)) // изменилось колчиство ордеров в рынке
{
if (tr_PrevLongOrders>tr_CurrLongOrders) // изменилось число ордеров в Long
{
tr_CloseLong=true;
tr_CloseLabelPrice=High[1]+tr_CloseLabelShift*Point;
}
if (tr_PrevShortOrders>tr_CurrShortOrders) // изменилось число ордеров в Short
{
tr_CloseShort=true;
tr_CloseLabelPrice=Low[1]-tr_CloseLabelShift*Point;
}
tr_PrevLongOrders=tr_CurrLongOrders;
tr_PrevShortOrders=tr_CurrShortOrders;
tr_PrevTotalOpenedOrders=tr_CurrTotalOpenedOrders;
}
}// есть открытые позиции
//---------------- Проверка изменения Баланса
tr_CurrBalance=AccountBalance();
if (tr_CurrBalance!=tr_PrevCurrBalance)// проверка изменения Balance
{
if (tr_CurrBalance-tr_PrevCurrBalance>0.0) tr_CurrCloseColor=tr_ProfitColor; else tr_CurrCloseColor=tr_LossColor;
tr_PrevCurrBalance=tr_CurrBalance;
//------------------ установка Метки закрытия --------------------
ObjectCreate("Close"+tr_CounterCloseLabel,OBJ_ARROW,0,Time[1],tr_CloseLabelPrice);
ObjectSet("Close"+tr_CounterCloseLabel,OBJPROP_ARROWCODE,tr_CloseLabelArrow);
ObjectSet("Close"+tr_CounterCloseLabel,OBJPROP_COLOR,tr_CurrCloseColor);
tr_CounterCloseLabel++;
//------------------ установка Метки закрытия --------------------
}// проверка изменения Balance
}//(IsTesting())
//----
tr_Bars=Bars;
return(0);
}
//+------------------------------------------------------------------+
En raison de la sortie du testeur (un peu tard cependant), je mets en ligne trade_lib_tester et info_lib_tester. Parce que leurs versions habituelles ne veulent pas être testées =))) Utilisez la même chose. Il suffit de remplacer les anciens noms dans les lignes d'inludes par les nouveaux.
Pourriez-vous poster tous ces fichiers, les plus récents comme les plus anciens, quelque part sur viac ou alpari ou forexitems ou finlists - en général, là où l'on peut joindre des fichiers. Il serait également plus facile à trouver. Merci d'avance.
Cher komposteur ! <br / translate="no">. Pourriez-vous s'il vous plaît mettre tous ces fichiers et les fichiers récents et antérieurs quelque part sur viac ou alpari ou forexitems ou finlist - en général, là où on peut attacher des fichiers. Il serait également plus facile à trouver. Merci d'avance.
Il y a beaucoup de changements. Et une énorme en plus. La tolérance d'erreur est à un tout autre niveau, l'information est plus complète, l'interface est plus conviviale ;) ...
En général, nous pouvons dire que c'est une bibliothèque absolument nouvelle =) N'hésitez pas à l'utiliser ;)
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Quelle est la pertinence de trader sur plusieurs symboles et / ou horizons temporels au sein d'un conseiller expert ?
Je suis actuellement assis et je réfléchis - devrais-je poster symbol_lib et un modèle de conseiller expert, conçu dans ce but précis =)
et je pense qu'il n'y a pas besoin... Si je négocie sur différents comptes, je devrai toujours utiliser plusieurs terminaux, et si je négocie sur un seul compte, j'ouvrirai simplement plusieurs fenêtres. Et il y aurait moins de confusion, il semble...
Il sera intéressant d'entendre les opinions et les arguments à leur sujet ;)
int CurPrice_p=Bid/Point; //текущая цена в пунктах int CurSLoss=OrderStopLoss( )/Point; //текущий стоплосс в пунктах int TS=40; //значение трейлингстопа в пунктах if(TS>=5) { int TStep=2; //минимальный шаг трейлинг стопа if(TStep<1) TStep=1; //проверка шага трейлинга { if(MathAbs(CurPrice_p-CurSLOss)>=TS+TStep) { if(CurPrice_p>CurSLOss) { double NewSLoss=(CurPrice_p-TS)*Point; изменить уровень стоплосс ордера на новый } if(CurPrice_p>CurSLOss) { NewSLoss=(CurPrice_p+TS)*Point; изменить уровень стоплосс ордера на новый } } } }c'est une idée ... c'est plus qu'une pensée - c'est une idée ;))
Le lendemain, je passerai en revue les erreurs qui ont été collectées par le conseiller expert et je réfléchirai à la mise en œuvre de fonctions de trading. Je vais partager avec vous la semaine prochaine ;)
Dans quelle mesure est-il pertinent d'effectuer des transactions sur plusieurs sceaux et/ou horizons temporels au sein d'un même conseiller expert ?
Suite au vote ( 1 contre (komposter), 0 en faveur, le reste s'est abstenu ), j'ai décidé de ne pas poster de déchets de trading multi-symboles dans ce fil =)
Si quelqu'un est toujours intéressé, écrivez et partagez la bibliothèque ;-|.
A utiliser :
1. Inscrivez ce fichier avec l'extension mqh, Tracert.mqh dans le dossier experts\include\
2. Ajouter la ligne #include <Tracert.mqh>
"http://*****************"
3. Insérer la fonction SetTrace() au tout début du bloc start() ;
int start() { int ticket, total,totalExpert ; //------------------------------------------------------ //pour simplifier et accélérer le code, sauvegardons les données des indicateurs nécessaires // dans des variables temporaires SetTrace() ;4. Après l'exécution de l'EA, ouvrez le fichier et obtenez quelque chose comme ceci :
Le code de l'utilitaire lui-même :
//+------------------------------------------------------------------+ //| Tracert.mq4 | //| Rosh | //| http://forexsystems.ru/phpBB/index.php | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://forexsystems.ru/phpBB/index.php" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ double tr_AOPLong,tr_AOPShort; double tr_LongLots,tr_ShortLots; int tr_CurrLongOrders,tr_CurrShortOrders; int tr_Total,tr_Counter; int tr_PrevLongOrders,tr_PrevShortOrders; int tr_CurrTotalOpenedOrders,tr_PrevTotalOpenedOrders; double tr_CurrBalance,tr_PrevCurrBalance; color tr_ProfitColor=Lime, tr_LossColor=DeepPink,tr_LongAOPColor=Blue,tr_ShortAOPColor=Red, tr_CurrCloseColor; int tr_CloseLabelArrow=108, tr_AOPLabelArrow=159; bool tr_CloseLong,tr_CloseShort; double tr_CloseLabelPrice; int tr_CloseLabelShift=20; int tr_CounterCloseLabel=0,tr_CounterAOPLabel=0; int tr_Bars; void SetTrace() { //---- if (IsTesting()&&(tr_Bars!=Bars)) { tr_CloseLong=false; tr_CloseShort=false; tr_AOPLong=0.0; tr_AOPShort=0.0; tr_LongLots=0.0; tr_ShortLots=0.0; tr_CloseLabelShift=iATR(NULL,0,50,1)*3.0/10.0/Point; if (tr_CurrBalance==0.0) { tr_CurrBalance=AccountBalance(); tr_PrevCurrBalance=AccountBalance(); } //----------------Проверка открытых позиций --------------------------- tr_CurrLongOrders=0; tr_CurrShortOrders=0; tr_CurrTotalOpenedOrders=0; tr_Total=OrdersTotal(); if (tr_Total>0)// есть открытые позиции { for (tr_Counter=0;tr_Counter<tr_Total;tr_Counter++)// подсчет открытых позиций { OrderSelect(tr_Counter, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_BUY) { tr_CurrLongOrders++; tr_AOPLong=tr_AOPLong+OrderLots()*OrderOpenPrice(); tr_LongLots=tr_LongLots+OrderLots(); } if (OrderType()==OP_SELL) { tr_CurrShortOrders++; tr_AOPShort=tr_AOPShort+OrderLots()*OrderOpenPrice(); tr_ShortLots=tr_ShortLots+OrderLots(); } }// подсчет открытых позиций //--------------- усреднение --------------------- if (tr_CurrLongOrders>0) tr_AOPLong=tr_AOPLong/tr_LongLots; if (tr_CurrShortOrders>0)tr_AOPShort=tr_AOPShort/tr_ShortLots; //--------------- усреднение --------------------- if (tr_AOPLong>0.0) { ObjectCreate("AOP"+tr_CounterAOPLabel,OBJ_ARROW,0,Time[1],tr_AOPLong);// не совсем корректно, но пока пойдет ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_ARROWCODE,tr_AOPLabelArrow); ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_COLOR,tr_LongAOPColor); tr_CounterAOPLabel++; } if (tr_AOPShort>0.0) { ObjectCreate("AOP"+tr_CounterAOPLabel,OBJ_ARROW,0,Time[1],tr_AOPShort);// не совсем корректно, но пока пойдет ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_ARROWCODE,tr_AOPLabelArrow); ObjectSet("AOP"+tr_CounterAOPLabel,OBJPROP_COLOR,tr_ShortAOPColor); tr_CounterAOPLabel++; } // Print("Long=",tr_CurrLongOrders," tr_AOPLong=",tr_AOPLong," *** Short=",tr_CurrShortOrders," tr_AOPShort=",tr_AOPShort); tr_CurrTotalOpenedOrders=tr_CurrLongOrders+tr_CurrShortOrders; if ((tr_CurrTotalOpenedOrders!=tr_PrevTotalOpenedOrders)||(tr_PrevLongOrders!=tr_CurrLongOrders)||(tr_PrevShortOrders!=tr_CurrShortOrders)) // изменилось колчиство ордеров в рынке { if (tr_PrevLongOrders>tr_CurrLongOrders) // изменилось число ордеров в Long { tr_CloseLong=true; tr_CloseLabelPrice=High[1]+tr_CloseLabelShift*Point; } if (tr_PrevShortOrders>tr_CurrShortOrders) // изменилось число ордеров в Short { tr_CloseShort=true; tr_CloseLabelPrice=Low[1]-tr_CloseLabelShift*Point; } tr_PrevLongOrders=tr_CurrLongOrders; tr_PrevShortOrders=tr_CurrShortOrders; tr_PrevTotalOpenedOrders=tr_CurrTotalOpenedOrders; } }// есть открытые позиции //---------------- Проверка изменения Баланса tr_CurrBalance=AccountBalance(); if (tr_CurrBalance!=tr_PrevCurrBalance)// проверка изменения Balance { if (tr_CurrBalance-tr_PrevCurrBalance>0.0) tr_CurrCloseColor=tr_ProfitColor; else tr_CurrCloseColor=tr_LossColor; tr_PrevCurrBalance=tr_CurrBalance; //------------------ установка Метки закрытия -------------------- ObjectCreate("Close"+tr_CounterCloseLabel,OBJ_ARROW,0,Time[1],tr_CloseLabelPrice); ObjectSet("Close"+tr_CounterCloseLabel,OBJPROP_ARROWCODE,tr_CloseLabelArrow); ObjectSet("Close"+tr_CounterCloseLabel,OBJPROP_COLOR,tr_CurrCloseColor); tr_CounterCloseLabel++; //------------------ установка Метки закрытия -------------------- }// проверка изменения Balance }//(IsTesting()) //---- tr_Bars=Bars; return(0); } //+------------------------------------------------------------------+Utilisez la même chose. Il suffit de remplacer les anciens noms dans les lignes d'inludes par les nouveaux.
Les fichiers sont situés à l'adresse http://forum.viac.ru/viewtopic.php?t=2973
Pourriez-vous poster tous ces fichiers, les plus récents comme les plus anciens, quelque part sur viac ou alpari ou forexitems ou finlists - en général, là où l'on peut joindre des fichiers. Il serait également plus facile à trouver. Merci d'avance.
Pourriez-vous s'il vous plaît mettre tous ces fichiers et les fichiers récents et antérieurs quelque part sur viac ou alpari ou forexitems ou finlist - en général, là où on peut attacher des fichiers. Il serait également plus facile à trouver. Merci d'avance.
http://forum.viac.ru/viewtopic.php?t=2973
Je déplacerai les descriptions avec les instructions plus tard...
la vitesse d'essai a été multipliée par plus de 10
Il y a beaucoup de changements. Et une énorme en plus.
La tolérance d'erreur est à un tout autre niveau, l'information est plus complète, l'interface est plus conviviale ;) ...
En général, nous pouvons dire que c'est une bibliothèque absolument nouvelle =)
N'hésitez pas à l'utiliser ;)