Fonctions utiles de KimIV - page 71

 
Vous devez numéroter les fractales supérieures et inférieures séparément. Dans les paramètres de la fonction, spécifiez le type UPPER ou LOWER et le nombre de fractales. À propos, si vous numérotiez séparément les coudes supérieurs et inférieurs lors de la recherche de points d'inflexion en zigzag également, ce serait plus pratique à utiliser.
 
KimIV писал(а) >>

Oui, il n'y a pas... Parce que je n'arrivais pas à décider comment numéroter de telles fractales :

Et si quelque chose comme ça ne compte pas comme une formation fractale. Une option ?

 
Kombat. Je ne suis pas d'accord avec cette option. Le fait est que lorsqu'il y a deux fractales sur la même barre, c'est le signe de la figure bien connue de la "lentille", parfois appelée "diamant". Ce chiffre peut donc être repéré dans le conseiller expert par ce signe.
 
Question à Docs et Igor = Est-il possible de construire l'indicateur "Profit" ou "Fonds" comme une ligne continue à partir du temps (de différents Т\F) dans une fenêtre séparée du temps ( ce qui signifie - contrôle de la performance du portefeuille en dynamique).... Malheureusement, il existe un indicateur sur le site d'Igor, mais il se présente sous la forme d'un tableau et est statique ... (ou peut-être en existe-t-il un - donnez-moi un lien) .....
 
khorosh писал(а) >>
Kombat. Je ne suis pas d'accord avec cette option. Le fait est que lorsqu'il y a deux fractales sur une barre, c'est le signe de la figure bien connue de la "lentille", parfois appelée "diamant". Ce chiffre peut donc être repéré dans l'EE par ce signe.

Pour la définition OUI, mais pour la numérotation, dont il s'agit...

 
nuj >> :
Question à Docs et Igor = Est-il possible de construire un indicateur de "Profit" ou de "Fonds" comme une ligne continue à partir du temps (de différents Т\F) dans une fenêtre séparée du temps ( ce qui signifie - contrôle de la performance du portefeuille en dynamique).... Malheureusement, il existe un indicateur sur le site d'Igor, mais il se présente sous la forme d'un tableau et est statique ... (ou peut-être en existe-t-il un - donnez-moi un lien) .....

chercher dans le forum

Dossiers :
equity_v7.mq4  17 kb
 

et demander si vous avez un conseiller qui :

1. ramasse tous les postes ouverts.

2. fixe un stop à aucune perte.

3.chalut

4. ferme les positions en trois niveaux. par exemple :

Le lot est égal à 1.

Sortie 1 - 50% du lot est fermé, par exemple 30 pips du prix d'ouverture.

2 way out - 30% du lot est fermé, par exemple 70 points du prix d'ouverture.

3 voies de sortie - 20% du terrain est fermé, par exemple sur le passage de la MA.

Merci.

 

Bonjour, Pourriez-vous me dire comment implémenter la fonction NumberOfBarOpenLastPos dans ce simple Expert Advisor,

pour qu'un ordre soit déclenché une fois par barre... J'ai mis la fonction dans le code, mais rien ne fonctionne...

//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#property copyright "Copyright © Book, 2007"
#lien de propriété "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// Valeurs numériques pour M15
extern double StopLoss =200 ; // SL pour l'ordre en cours d'ouverture
extern double TakeProfit =10 ; // TP pour l'ordre en cours d'ouverture
extern intern Period_MA_1=11 ; // Période MA 1
extern int Period_MA_2=31 ; // Période MA 2.
extern double Rastvor =28.0 ; // Distance entre les MAs.
extern double Lots =0.1 ; // Nombre fixe de lots.
extern double Prots =0.07 ; // Pourcentage de fonds libres

bool Work=true ; // Le conseiller expert fonctionnera.
string Symb ; // Nom de l'instrument financier
//--------------------------------------------------------------- 2 --
int start()
{
int
Total, // Nombre de commandes dans la fenêtre
Tip=-1, // Type de commande sélectionné (B=0,S=1)
Ticket ; // Numéro de commande
double
MA_1_t, // Valeur. Valeur actuelle de MA_1
MA_2_t, // Valeur MA_2_t. MA_2_t valeur actuelle, // MA_2_t valeur.
Lot, //Numéro de lot dans l'ordre actuellement sélectionné
Lts, //Nombre de lots dans un ordre ouvert
Min_Lot, // Nombre minimum de lots
Étape, // Étape de la modification de la taille du lot
Libre, // Fonds libres actuels
One_Lot, // Valeur d'un lot
Prix, // Prix de la commande sélectionnée
SL, // Prix SL de l'ordre sélectionné
TP ; // TP de l'ordre sélectionné
bool
Ans =false, // Réponse du serveur après la fermeture
Cls_B=false, // Critères de clôture de l'achat
Cls_S=false, // Critère de fermeture Vendre
Opn_B=false, // Critère d'ouverture d'Achat
Opn__S=false ; // critère d'ouverture de Sell
//--------------------------------------------------------------- 3 --
//Prétraitement
if(Bars < Period_MA_2) // Pas assez de barres
{
Alert("Pas assez de barres dans la fenêtre, le conseiller expert ne fonctionne pas") ;
return ; // Quitter start()
}
if(Work==false) // Erreur critique.
{
Alert("Erreur critique. Le conseiller expert ne fonctionne pas.") ;
return ; // Sortie de start()
}
//--------------------------------------------------------------- 4 --
// Comptage des commandes
Symb=Symbol() ; // Nom de l'instrument financier.
Total=0 ; // Nombre de commandes
for(int i=1 ; i<=OrdersTotal() ; i++) // Boucle de commande
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Si ce qui suit se produit
{ // Analyse de l'ordre :
if (OrderSymbol()!=Symb)continue ; // Pas notre instrument financier
if (OrderType()>1) // Nous avons un ordre en suspens
{
Alert("Ordre en attente détecté. Le conseiller expert ne fonctionne pas ;)
return ; // Exit()
}
Total++ ; // Compteur d'ordres de marché
if (Total>1) // Pas plus d'une commande
{
Alert("Plusieurs ordres de marché. Le conseiller expert ne fonctionne pas ;)
return ; // Exit()
}
Ticket=OrderTicket() ; // Numéro de commande sélectionné.
Tip =OrderType() ; // Type de la commande sélectionnée.
Prix =OrderOpenPrice() ; // Prix de l'ordre sélectionné.
SL =OrderStopLoss() ; // SL de l'ordre sélectionné.
TP =OrderTakeProfit() ; // TP de l'ordre sélectionné.
Lot =OrderLots() ; // Nombre de lots
}
}
//--------------------------------------------------------------- 5 --
// Critères commerciaux
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0) ; // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0) ; // MA_2

if (MA_1_t > MA_2_t + Rastvor*Point) // si différence entre
{ // ...MA1 et 2 est large
Opn_B=true ; // Ouverture du critère d'achat
Cls_S=true ; // Fermeture du critère Vendez
}
if (MA_1_t < MA_2_t - Rastvor*Point) // Si la différence entre
{ // ...MA_1 et 2 est large
Opn_S=true ; //ouver le critère de vente
Cls_B=true ; //Critères de clics Acheter
}
//--------------------------------------------------------------- 6 --
// Fermer les commandes
while(true) //Ordre de fermer la boucle.
{
if (Tip==0 && Cls_B==true) //Ouvrir un ordre d'achat.
{ //il y a un critère de fermeture
Alert("Essayer de fermer l'achat ",Ticket," ;)
RefreshRates() ; // Rafraîchir les données
Ans=OrderClose(Ticket,Lot,Bid,2) ; // Fermer l'achat
if (Ans==true) // Cela a marché :)
{
Alerte ("Ordre d'achat fermé ",Ticket ;)
break ; // Sortie de la boucle fermée
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // réessayer
return ; // Sortie de start()
}

if (Tip==1 && Cls_S==true) // Ordre de vente ouvert.
{ // il existe un critère proche
Alert("Tentative de fermeture de la vente ",Ticket," ;)
RefreshRates() ; // Rafraîchir les données
Ans=OrderClose(Ticket,Lot,Ask,2) ; // Vente de clôture
if (Ans==true) // Cela a marché :)
{
Alert ("Sell order closed ",Ticket ;)
break ; // Sortie de la boucle fermée
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // réessayer
return ; // Sortie de start()
}
break ; // Quitter le while
}
//--------------------------------------------------------------- 7 --
// Valeurs de commande
RefreshRates() ; // Rafraîchir les données
Min_Lot=MarketInfo(Symb,MODE_MINLOT) ; // Nombre minimal de lots
Free =AccountFreeMargin() ; // Fonds libres
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valeur de 1 lot
Step =MarketInfo(Symb,MODE_LOTSTEP) ; // Changement de taille par étape

if (Lots > 0) // Si les lots sont spécifiés
Lts =Lots ; // nous travaillons avec eux
else // % de fonds libres
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Pour l'ouverture

if(Lts < Min_Lot) Lts=Min_Lot ; // Pas moins que Min_Lot ; // Pas moins que Min_Lot
if(Lts*One_Lot > Free) // Lots plus chers que Free
{
Alert(" Pas assez d'argent ", Lts," lots) ;
return ; // Quitter start()
}
//--------------------------------------------------------------- 8 --
//Ouvrir les commandes
si (NumberOfBarOpenLastPos()>0){
while(true) // Fermez la boucle de commande.
{
if (Total==0 && Opn_B==true) // Aucun ordre ouvert
{ //open Buy criterion.
RefreshRates() ; // Mise à jour des données
SL=Bid - New_Stop(StopLoss)*Point ; // Calcul du SL ouvert
TP=Bid + New_Stop(TakeProfit)*Point ; // Calcul du TP ouvert.
Alert("Tentative d'ouverture d'un achat. En attente de réponse...") ;
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//ouvert Buy
if (Ticket > 0) // ça a marché :)
{
Alerte ("Ordre d'achat ouvert ",Ticket ;)
return ; //Exit la commande
}
if (Fun_Error(GetLastError())==1) // Traitement des erreurs
continue ; // réessayer
return ; // Sortie de start()
}
if (Total==0 && Opn_S==true) // aucun ordre ouvert
{ //ouverture du critère de vente.
RefreshRates() ; // Mise à jour des données
SL=Ask + New_Stop(StopLoss)*Point ; // Calcul du SL ouvert.
TP=Ask - New_Stop(TakeProfit)*Point ; // Calcul du TP ouvert.
Alert("Tentative d'ouverture de la vente. En attente de réponse...") ;
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel.
if (Ticket > 0) // Cela a marché :)
{
Alerte ("Ordre de vente ouvert ",Ticket ;)
return ; // Sortir de la fonction start()
}
if (Fun_Error(GetLastError())==1) // Traitement des erreurs
continue ; // réessayer
return ; // Sortie de start()
}
break ; // Quitter le while
}
}
//--------------------------------------------------------------- 9 --
return ; //exit while ; //start()
}
//-------------------------------------------------------------- 10 --


//+----------------------------------------------------------------------------+
//| Auteur : Kim Igor V. alias KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Version : 19.02.2008 |
//| Description : Renvoie le numéro de la barre de la dernière position ouverte ou -1.
//+----------------------------------------------------------------------------+
//| Paramètres : |
//| sy - nom de l'instrument ("" ou NULL - symbole courant) | |
//| tf - timeframe ( 0 - timeframe actuel) |
//| op - opération ( -1 - toute position) |
//| mn - MagicNumber ( -1 - tout nombre magique) |
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
date t ;
int i, k=OrdersTotal() ;

si (sy=="" || sy=="0") sy=Symbole() ;
for (i=0 ; i<k ; i++) {
si (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
si (OrderSymbol()==sy) {
si (OrderType()==OP_BUY || OrderType()==OP_SELL) {
si (op<0 || OrderType()==op) {
si (mn<0 || OrderMagicNumber()==mn) {
si (t<OrderOpenTime()) t=OrderOpenTime() ;
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True))
}

int Fun_Error(int Error) // Fonction de gestion des erreurs
{
switch(Erreur)
{ // Les erreurs qui peuvent être évitées.
cas 4 : Alert("Le serveur commercial est occupé. Essayez à nouveau...") ;
Sleep(3000) ; // Solution simple.
return(1) ; // Sortie de la fonction.
cas 135:Alert("Le prix a changé. Essayez à nouveau...") ;
RefreshRates() ; // Rafraîchit les données.
return(1) ; // Sortie de la fonction.
cas 136:Alert("Pas de prix. En attente d'un nouveau tick...") ;
while(RefreshRates()==false) // Till a new tick
Sleep(1) ; // Délai dans la boucle
return(1) ; // Sortie de la fonction
cas 137:Alert("Broker is busy. Try again...") ;
Sleep(3000) ; // Solution simple.
return(1) ; // Sortie de la fonction.
cas 146:Alert("Le sous-système de négociation est occupé. Essayez à nouveau...") ;
Sleep(500) ; // Décision simple
return(1) ; // Sortie de la fonction
// Erreurs critiques
cas 2 : Alert("Erreur générale ;)
return(0) ; // Sortie de la fonction.
cas 5 : Alert("Ancienne version du terminal.") ;
Work=false ; // Ne plus travailler
return(0) ; // Sortie de la fonction
cas 64 : Alert("Compte bloqué.") ;
Work=false ; // Ne plus travailler
return(0) ; // Sortie de la fonction
cas 133:Alert("Trading interdit.") ;
return(0) ; // Sortie de la fonction
cas 134:Alert("Pas assez d'argent pour exécuter la transaction.") ;
return(0) ; // Sortie de la fonction
default : Alert("An error has occurred ",Error) ; // Autres options
return(0) ; // Sortie de la fonction
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Vérifier le stop.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distance min.
if (Parametr<Min_Dist) // Si moins que ce qui est autorisé.
{
Parametr=Min_Dist ; // Définit la tolérance.
Alert("Distance d'arrêt augmentée ;)
}
return(Parametr) ; // Valeur de retour.
}
//-------------------------------------------------------------- 12 --

 
kurilko >> :

// Ouverture des commandes

si (NumberOfBarOpenLastPos()>0)

La fonction renvoie plus de 0 seulement si une position a été ouverte, si pas -1 alors suivre...

si (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

{

}

 

Changement de la condition en if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

Cela ne fonctionne toujours pas, peut-être faut-il l'écrire ailleurs dans le code ?