Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1139
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
Y a-t-il des robots pour android ?
Il n'y a pas de négociation automatique dans la version mobile de Metatrader et il est peu probable qu'elle apparaisse dans un avenir proche. Si vous voulez contrôler le robot depuis votre téléphone, il vous faut un VPS qui hébergera le terminal avec le robot, + un logiciel pour l'accès à distance sur votre téléphone.
J'ouvre dix graphiques hebdomadaires de paires de devises dans MT5 et le terminal charge 800 mégaoctets d'historique de ticks. Il est constamment chargé, bien qu'il n'y ait pratiquement aucun changement sur les graphiques. La question est de savoir pourquoi j'ai besoin de l'historique des tics, si j'utilise uniquement des graphiques hebdomadaires ? À propos, sur MT4, les graphiques hebdomadaires s'ouvrent instantanément sans aucun délai.
c'est une caractéristique de mt5 - tout charger sur m1 et ensuite construire la période requise... ....
et donc à chaque fois, pour chaque symbole
L'idée de l'EA est d'acheter ou de vendre lorsque le prix touche un niveau horizontal ou une ligne de tendance tracée manuellement. J'ai créé un EA à partir de différents EA et indicateurs qui fonctionnent. Mais l'EA ne fonctionne pas. Ou plutôt, il ouvre seulement SELL sans aucun signal sur le premier tick. Qu'est-ce qui ne va pas ?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //ouverture du canal intérieur
//---------------------------------------
extern inttern TF=15 ;
//+------------------------------------------------------------------+
extern int StopLoss = 300 ;
//--------------------------------------------
extern double TakeProfit = 3000 ;
//--------------------------------------
extern int Per_MA= 20 ;
//---- constantes
#define OP_BUY_ 0
#define OP_SELL_ 1
//-------------------------------------------------------------------+
extern double Lots = 0.1 ;
extern double MaximumRisk = 1 ;
extern double DecreaseFactor = 0 ;
bool b_1=true, s_1=true ;
//+------------------------------------------------------------------+
//| Calculer les positions ouvertes |
//+------------------------------------------------------------------+
double MA=iMA(NULL,TF,Per_MA,0,0,0,1) ;
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0 ;
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
si(OrderType()==OP_BUY) achète++ ;
si(OrderType()==OP_SELL) vend++ ;
}
}
//---- volume des commandes de retour
if(buys>0) return(buys) ;
sinon retour(-vendues) ;
}
//+------------------------------------------------------------------+
//| Calculer la taille optimale du lot |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots ;
int orders=HistoryTotal() ; // total des commandes historiques
int pertes=0 ; // nombre d'ordres de pertes sans pause
//---- sélectionner la taille du lot
//lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2) ;
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100/MarketInfo(Symbol(),MODE_TICKVALUE)/StopLoss,2) ;
//---- calcule le nombre d'ordres de pertes sans rupture.
si(Facteur de diminution>0)
{
for(int i=ordres-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Erreur dans l'historique !") ; break ; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continuer ;
//----
si(OrderProfit()>0) break ;
si(OrderProfit()<0) pertes++ ;
}
si(pertes>1) lot=NormaliserDouble(lot-lot*pertes/Facteur de réduction,2) ;
}
//---- retourner la taille du lot
si(lot<0.01) lot=0.01 ;
retour(lot) ;
}
//-------------------------------------------------
/* cette partie de l'indicateur
int CheckBreakoutLines(int shift)
{
// Total des objets
int obj_total = ObjectsTotal() ;
// Heure de la barre
datetime now = Time[shift] ;
// Iterate
for(int i = obj_total - 1 ; i >= 0 ; i--)
{
// Nom de l'objet
string label = ObjectName(i) ;
// Types
int OType = ObjectType(label) ;
bool trendline = false ;
bool hline = false ;
// Prix à évaluer
double cprice = 0 ;
// Lignes de tendance
si(OType == OBJ_TREND )
{
bool ray = ObjectGet(label, OBJPROP_RAY) ;
si(!ray)
{
datetime x1 = ObjectGet(label, OBJPROP_TIME1) ;
datetime x2 = ObjectGet(label, OBJPROP_TIME2) ;
si(x1 < maintenant && x2 < maintenant) continuer ;
}
cprice = GetCurrentPriceOfLine(label, shift) ;
trendline = true ;
} else if(OType == OBJ_HLINE ) {
cprice = ObjectGet(label, OBJPROP_PRICE1) ;
hline = true ;
} else {
continuer ;
}
// Breakouts et faux breakouts des lignes de tendance et des hlines
si(MA>cprice &&Ask<cprice)
{
if(trendline) { return(OP_BUY_) ; } else if(hline) { return(OP_BUY_) ; }
} else if(MA>cprice &&Ask<cprice) {
if(trendline) { return(OP_SELL_) ; } else if(hline) { return(OP_SELL_) ; }
}
}
return(EMPTY_VALUE) ;
}
double GetCurrentPriceOfLine(string label, int shift)
{
double price1 = ObjectGet(label, OBJPROP_PRICE1) ;
double price2 = ObjectGet(label, OBJPROP_PRICE2) ;
datetime d1 = ObjectGet(label, OBJPROP_TIME1) ;
datetime d2 = ObjectGet(label, OBJPROP_TIME2) ;
int shiftfrom = iBarShift(Symbol(), 0, d1, false) ;
int shiftto = iBarShift(Symbol(), 0, d2, false) ;
int lapse = MathAbs(shiftto - shiftfrom) ;
int distance = MathAbs(shift - shiftfrom) ;
double pendiente = (prix2 - prix1) / lapse ;
double cpoint = prix1 + (distance * pendiente) ;
retour(cpoint) ;
}
//-------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| Vérifier les conditions d'un ordre ouvert |
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res ;
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
//---- conditions d'achat
if(OP_BUY_&&b_1)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-(StopLoss*Point),Ask+TakeProfit*Point," VV",MAGIC,0,Green) ;
b_1=faux ; s_1=vrais ;
retour ;
}
//---- conditions de vente
if(OP_SELL_&&s_1)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+(StopLoss*Point),Bid-TakeProfit*Point," VV",MAGIC,0,Red) ;
s_1=faux;b_1=vrai ;
retour ;
}
//----
}
//+------------------------------------------------------------------+
//| Démarrer la fonction |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et le commerce
si(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole actuel
si(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
L'idée de l'EA est d'acheter ou de vendre lorsque le prix touche un niveau horizontal ou une ligne de tendance tracée manuellement. J'ai créé un EA à partir de différents EA et indicateurs qui fonctionnent. Mais l'EA ne fonctionne pas. Ou plutôt, il ouvre seulement SELL sans aucun signal sur le premier tick. Qu'est-ce qui ne va pas ?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //ouverture du canal intérieur
//---------------------------------------
extern inttern TF=15 ;
//+------------------------------------------------------------------+
extern int StopLoss = 300 ;
//--------------------------------------------
extern double TakeProfit = 3000 ;
//--------------------------------------
extern int Per_MA= 20 ;
//---- constantes
#define OP_BUY_ 0
#define OP_SELL_ 1
.....................................
.....................................
//---- vérifier l'historique et le commerce
si(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole actuel
si(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
J'ai chargé le programme dans le bloc-notes et supprimé les lignes vides. Il est devenu possible de couvrir d'un coup d'œil. J'ai appuyé sur le bouton SRC et j'ai collé. Voici ce qui est apparu. 1) Pourquoi auriez-vous besoin de définir
si nous avons déjà OP_BUY=0 et OP_SELL=1
2) La racine de tout mal se trouve dans ce fragment. Une seule et même condition (MA>cprice &&Ask<cprice) est vérifiée deux fois, et des décisions différentes sont prises.
3) Après cela, chaque branche effectue des vérifications mais le résultat est toujours le même.
D'une manière générale, la ligne ci-dessus peut être simplifiée et écrite comme suit
if(trendline)return OP_BUY; if(hline) return OP_BUY; или еще проще if(trendline or hline) return OP_BUY;
J'ai chargé le programme dans le bloc-notes et supprimé les lignes vides. Il est devenu possible de couvrir d'un coup d'œil. J'ai appuyé sur le bouton SRC et j'ai collé. Voici ce qui est apparu. 1) Pourquoi auriez-vous besoin de définir
si nous avons déjà OP_BUY=0 et OP_SELL=1
2) La racine de tout mal se trouve dans ce fragment. Une seule et même condition (MA>cprice &&Ask<cprice) est vérifiée deux fois, et des décisions différentes sont prises.
3) Après cela, chaque branche effectue des vérifications mais le résultat est toujours le même.
La ligne ci-dessus peut être simplifiée et écrite comme suit
Merci pour la réponse, mais il n'ouvre toujours que SELL, comme je le vois puisque OP_SELL = 1. Cette condition est toujours satisfaite. Je l'ai réécrit comme ceci
Les ordres ont cessé de s'ouvrir, à mon avis, int CheckBreakoutLines(int shift) ne fonctionne pas.
Chers professionnels. Que dois-je faire avant ou après l'installation de MT4 pour que l'historique des cotations puisse être écrit/lu à partir de n'importe quel disque sauf le disque système ou que ce ne soit PAS possible ?
MT4 de tous les courtiers dépose tout dans C:\Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (pour chaque courtier et pour chaque terminal respectivement). Deux MT4 chez deux courtiers pour 3-4 paires ont consommé 25GB, c'est-à-dire toute la mémoire libre. Les citations nécessaires sont également chargées dans le testeur C:\Users\.......\tester\history.
S'il vous plaît, aidez-nous en ne prenant pas en compte la réinstallation de Windows (j'ai 7) avec la réallocation des tailles de disques. Peut-être que je fais quelque chose de mal ? Si je l'ai manqué et qu'il a déjà été discuté quelque part, envoyez-moi un lien...
Merci d'avance.
Chers professionnels. Que dois-je faire avant ou après l'installation de MT4 pour que l'historique des cotations puisse être écrit/lu à partir de n'importe quel disque sauf le disque système ou que ce ne soit PAS possible ?
MT4 de tous les courtiers dépose tout dans C:\Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (pour chaque courtier et pour chaque terminal respectivement). Deux MT4 chez deux courtiers pour 3-4 paires ont consommé 25GB, c'est-à-dire toute la mémoire libre. Les citations nécessaires sont également chargées dans le testeur C:\Users\.......\tester\history.
Veuillez me conseiller, sans tenir compte de la réinstallation de Windows (j'ai 7) avec réaffectation de la taille des disques. Peut-être que je fais quelque chose de mal ? Si je l'ai manqué et qu'il a déjà été discuté quelque part, envoyez-moi un lien...
Merci d'avance.
Il suffit de copier l'ensemble du dossier du terminal sur un lecteur hors système, de créer un raccourci vers celui-ci et d'écrire le commutateur /portable.