[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 620

 
lottamer:


oui c'est ainsi que ce point est bien connu de moi...

s'il vous plaît, écrivez un article demandant le billet de la semaine dernière de l'histoire ... et je vais attraper la logique de celui-ci ...



int fLastClosetPoz()
{
int Tot=OrdersHistoryTotal(),Ticket=-1 ; datetime time=0 ;
si(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
retour(Ticket) ;
}

 
lottamer:

MISTIQUE ! !!

celui-ci

-----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000) ; // pour les devises avec la dimension EUR


Imprimer (pp_sell) ;

------------------------------------------------------------------------------------

Imprime -10, comme il se doit, puisque la dernière transaction de VENTE a un bénéfice de 10

mais si vous insérez plusieurs TEMPS DIFFICILES ENTRE L'IMPRIMEUR ET LA VARIABLE, par ex.

----------------------------------------------------------------------------


pp_sell=(-(PriceOpenLastClosePos()-PriceCloseLastPos())*100000) ; // pour les devises avec la dimension EUR


si ( Hour()>=10 && Hour()<20)

{

si ( Stoch_1>Stoch_2) return(0) ;

else {

si (OrdersTotal()==0)

{ PlaySound("ok.wav") ;

si ( GetTypeLastClosePos()==1) Imprimer (pp_sell) ;

}

Print("___") ;

}

}

retour(0) ;

}

------------------------------------------------------------------------------------

cela fonctionne, mais imprime -9 ! !!!

Quel est le secret ?


Dans ce cas, les inexactitudes de calcul s'accumulent et peuvent finir par devenir significatives. Vous pensez que vous insérez desconditions qui NE CHANGENT PAS, en fait vous forcez l'ordinateur à faire des calculs inutiles et vos conditionsne changent PAS.

Et êtes-vous sûr quePriceOpenLastClosePos() et PriceCloseLastPos() définissent des valeurs pour la même position ?

 
rigonich:


int fLastClosetPoz()

{
int Tot=OrdersHistoryTotal(),Ticket=-1 ; datetime time=0 ;
si(Tot>0)
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
{
si(OrderSymbol()==Symbol())
{
si(OrderCloseTime()>time)
{
time=OrderCloseTime();Ticket=OrderTicket() ;
}
}
}
sinon continuer ;
}
}
retour(Ticket) ;
}


en commençant par if(OrderCloseTime()>time)... alors on ne sait pas trop d'où ça vient... enfin, peu importe...

Il imprime un ticket, mais seulement le dernier. Et que faire de l'avant-dernier ? Je ne vois pas comment on peut imprimer le deuxième billet ?

D'abord j'ai juste écrit Print LastClosetPoz()

prendre le 2e (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY).... ?

Print LastClosetPoz(2) ? ? erreur évidente, mais qui serait logique :))))

J'essaie de mettre d'autres paramètres d'une position fermée(prix de clôtured' une position stop) au lieu de OrderTicket dans la ligne Ticket=OrderTicket() ; - cela ne fonctionne pas.

 
rigonich:

Vous travaillez avec des valeursnon normalisées comme le double. Dans ce cas, les imprécisions de calcul s'accumulent et peuvent éventuellement devenir significatives.


N'est-il pas gros pour un ordinateur d'accumuler jusqu'à 10% d'erreur en 4 lignes ? :))))))))))) (en grand nombre, moins de 10%)

1) qu'y a-t-il à sauver si l'ordre fermé est fixe et que tous ses paramètres "ne flottent pas" ?

2) Les conditions n'étaient en aucun cas liées au calcul du paramètre de sortie. Ils n'étaient qu'une barrière - laisser aller - ne pas laisser aller...

3) Et pourquoi alors le résultat ne flotte pas dans le travail d'une EA, mais flotte d'une EA à l'autre ?

 
lottamer:


en commençant par if(OrderCloseTime()>time)... alors on ne sait pas trop d'où ça vient... mais bon...

Il imprime un ticket, mais seulement le dernier. Et que faire avec l'avant-dernier ? Je ne vois pas comment le faire avec le deuxième ticket ?

prendre le 2e (i) ? OrderSelect(2,SELECT_BY_POS,MODE_HISTORY).... ?

1. S'il vous plaît, écrivez un article avec une demande de ticket de l'histoire.-... votre question.

Pour trouver l'avant-dernier, il faut mémoriser le ticket du dernier en date (par exemple dans la variable A), puis il faut exécuter la boucle une fois de plus et "sauter" cet ordre, c'est-à-dire changer la variable

if(OrderSymbol()==Symbol()) àif(OrderSymbol()==Symbol()&& OrderTicket()!=A), ou ajouter une ligneif(Ticket()!=A)continue;

Et j'ai déjà expliqué que l'indice de l'ordre ne coïncidera pas toujours avec celui qui a été clôturé sur le compte, puisque les ordres au marché et les ordres en attente sont pris en compte ensemble et que ces derniers n'ont pas de prix de clôture, c'est pourquoi tous les ordres sont mis en boucle pour trouver le dernier ordre clôturé et l'ordre avec le temps de clôture le plus long est examiné.

 
rigonich:

1. veuillez écrire un article demandant un billet pour la dernière semaine de l'histoire...-... votre question.

Pour trouver l'avant-dernier, nous devons mémoriser le ticket du dernier (par exemple dans la variable A), puis nous devons exécuter la boucle une fois de plus et "sauter" cet ordre, c'est-à-dire changer la ligne

if(OrderSymbol()==Symbol()) àif(OrderSymbol()==Symbol()&& OrderTicket()!=A), ou ajouter une ligneif(Ticket()!=A)continue;


la question principale :

what for(int i=0;i<OrdersHistoryTotal();i++) avons-nous besoin exactement de OrdersHistoryTotal() quand, par exemple, je n'ai besoin que de 2 transactions ?

Que pensez-vous de ça ?

ou(int i=0;i<2;i++) ? (vérifié - ticket =-1....) nda.....tuman... :))))

 
lottamer:


la question principale :

mais pourquoi avons-nous besoin de la ligne for(int i=0;i<OrdersHistoryTotal();i++) avons-nous besoin exactement de OrdersHistoryTotal() quand, par exemple, je n'ai besoin que de 2 transactions ?

Que pensez-vous de ça ?

ou(int i=0;i<2;i++) ? (vérifié - ticket =-1....) nda.....tuman... :))))


J'ai terminé le commentaire précédent, voyez. De plus, je vous ai écrit un code qui recherche la dernière transaction fermée sur l'instrument actuel.
 
Aidez-moi si je décide d 'écrire un robot en C/C++, par exemple. Ce n'est pas un problème d'en écrire un, mais comment le connecter avec metatrader ? Comment obtenir des devis et renvoyer un signal d'achat/de vente ?
 
Desead:
Aidez-moi si je décide d'écrire un robot en C/C++, par exemple. Ce n'est pas un problème d'en écrire un, mais comment le connecter avec metatrader ? Comment obtenir des devis et renvoyer un signal d'achat/de vente ?

Je ne connais pas d'autres langages, mais il est peut-être possible d'écrire votre code en tant que DLL et de l'appeler depuis des programmes MQL.
 
rigonich:

J'ai terminé le commentaire précédent, voyez.


Oui, je comprends maintenant pourquoi il y a une comparaison entre le temps dans la boucle et le temps en général.....

Je comprends aussi la LOGIQUE - marquer "A", puis exclure "A", mais d'abord, toutes les options OÙ ce "A" peut être épinglé, j'ai essayé - et pourtant le conseiller me renvoie le dernier ticket, pas l'avant-dernier.

.

J'ai entré 2 boucles (2 fonctions) - la première votre original, la seconde avec l'exception de "A"... s'exécutent l'un après l'autre.

Imprimez zéro....

----------------------------------------------------------------------------------------------------

si ( Hour()>=10 && Hour()<20)

{

LastClosetPoz();Sec_LastClosetPoz() ;

Imprimer ( ticket2,ticket) ;

}

retour(0) ;

}

//--------------------------------------------+

int LastClosetPoz()

{

int Tot=OrdersHistoryTotal(),Ticket=-1 ; datetime time=0 ;

si(Tot>0)

{

for(int i=0;i<OrdersHistoryTotal();i++)

{

si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

{

si(OrderSymbol()==Symbol())

{

si(OrderCloseTime()>time)

{

time=OrderCloseTime();Ticket=OrderTicket() ; A=Ticket ;

}

}

}

sinon continuer ;

}

}

retour(Ticket) ;

}


//--------------------------------------------

int Sec_LastClosetPoz()

{

int Tott=OrdersHistoryTotal(),Ticket2=-1 ; datetime time2=0 ;

si(Tott>0)

{

for(int i=0;i<OrdersHistoryTotal();i++)

{

si(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

{

if(OrderSymbol()==Symbol()&&OrderTicket()!=A)

{

si(OrderCloseTime()>time2)

{

time2=OrderCloseTime();Ticket2=OrderTicket() ;

}

}

}

sinon continuer ;

}

}

retourner(Ticket2) ;

}

Raison: