Fonctions utiles de KimIV - page 98

 
Bonjour Igor ! 09.05.2008 17:10 à la page 17. 17 Vous avez décrit la fonction de corrélation. Pourriez-vous décrire la fonction de corrélation en utilisant la formule de Pearson ?
 

Bonjour Igor !

Pourriez-vous modifier l'EA e-OpenByTime ou en écrire une nouvelle, ou encore en suggérer une déjà prête :)))

J'ai besoin d'un EA qui met les pauses dans différentes directions à X temps par N points du prix !

 

Bonjour, Igor !

Avez-vous un script qui dessine des segments de ligne horizontale à X et Y pips du signal ?

Je m'explique : il existe des signaux d'achat/vente (croisement de muwings, fractal, etc.).

Le script définit 4 paramètres, par exemple :

- 300 pips à Stop,

- 500 pips à prendre,

- 10 barres = longueur des barres,

- où et comment prendre les signaux - référence à l'indicateur de signaux, insertion de conditions pour les signaux... Ce point est à méditer !

Le script dessine 2 lignes sur chaque signal d'achat :

1) le premier ("stop") inférieur de 300 pips au prix d'ouverture de la barre de signal ;

2) deuxième ("Take") plus haut de 500 points par rapport au prix d'ouverture de la barre de signal ;

3) les lignes commencent sur la barre de signal et se terminent sur la 10ème barre.

Il en est de même dans le cas des signaux de vente, seuls les retraits des lignes sont inversés.

Je pense qu'une telle visualisation sera utile pour l'estimation préliminaire du "signal-stop".

Salutations, Vadim.

 

Bonjour Igor !

Question 1.

Il y a une erreur 138 dans votre fonction OpenPosition() - ERR_REQUOTE se met en pause :

si (err!=135) Sleep(1000*7.7) ;

Bien qu'il soit recommandé dans la documentation de rafraîchir les données et de réessayer immédiatement (le prix part, je veux ouvrir une position dès que possible))).

Que ce soit correct, alors :

si (err!=135 && err!=138) Sleep(1000*7.7); ?

Ou peut-être que je rate quelque chose ?

Question 2.

Veuillez m'indiquer comment spécifier correctement le paramètre Slippage égal à 5 points dans la fonction OrderSend() si ma société de courtage (Alpari) donne 5 décimales.

- "50" ?

- ou "5" ?

 
slavamir писал(а) >>

Question 1.

Dans votre fonction OpenPosition(), l'erreur 138 - ERR_REQUOTE est mise en pause :

si (err!=135) Sleep(1000*7.7) ;

Bien qu'il soit recommandé dans la documentation de rafraîchir les données et de réessayer immédiatement (le prix part, je veux ouvrir une position dès que possible))).

Que ce soit correct, alors :

si (err!=135 && err!=138) Sleep(1000*7.7); ?

Oui, c'est bon ! Vous pouvez le faire de cette façon aussi... Merci !

slavamir a écrit >>

Question 2.

Veuillez me dire comment définir correctement le paramètre Slippage égal à 5 points dans la fonction OrderSend() si ma société de courtage (Alpari) donne 5 décimales.

- "50" ?

- Ou est-ce "5" ?

5
 

Bonjour Igor,

Pourriez-vous nous aider à affiner votre fonction GetProfitFromDateInCurrency(). J'ai besoin qu'il calcule le profit des ordres même fermés uniquement. J'utilise la clôture partielle (fractionnement) des ordres et la fonction CloseBy pour clôturer le solde d'un ordre existant. Pour déterminer si un nombre pair ou impair d'ordres a été clôturé, j'utilise la formule suivante :

double x, y ; --------------------------------- Supposons que
x=MathFloor(OrderLots()/0.02) ; --------- a. Si lots 0.04/0.02=2 --- b. Si lots 0.03/0.02=1
y=x*0.02 ; ---------- a. 2*0,02=0,04 --- б. 1*0,02=0,02
if (y==OrderLots()) ---------- а. 0.04==0.04 --- b. 0.02!=0.04
XLots=y ; Si c'est égal, alors XLots obtient la valeur de y

Cela fonctionne (je n'ai pas trouvé de meilleure façon de diviser en pair/impair et je n'ai pas eu d'indice quand j'ai demandé).

Ensuite, l'appel de fonction réel (celui que j'ai fait à partir du vôtre)
ClOrdProf=GetProfitFromDateInCurrency("", -1, -1, XTime, XLots) ;

Et ma vaine tentative d'ajouter à votre fonction la condition selon laquelle le profit doit être calculé si les lots sont pairs :

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
double p=0 ;
int i, k=OrdersHistoryTotal() ;

if (sy=="0") sy=Symbol() ;
for (i=0 ; i<k ; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap() ;
}
}
}
}
}
}
}
return(p) ;
}

Il ne veut pas compter.
1. Est-ce que je me trompe quelque part dans la fonction ?
2. Le fait que les ordres soient fermés par OrdCloseBy pourrait-il avoir un effet ?

 
Supposons que le paramètre int lt prenne trois valeurs d'indicateur dans la fonction GetProfitFromDateInCurrency()
-1 tous les ordres, 0 - lots pairs, 1 - lots impairs, puis
remplacer
if (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap()

}

à

if (lt == -1){
p+=OrderProfit
()+OrderCommission()+OrderSwap() ;
} else {
int test = OrderLors() * 100 ;
if (lt == test % 2) {
p+=OrderProfit()+OrderCommission()+OrderSwap() ;
} else {
p+=OrderProfit()+OrderCommission()+OrderSwap() ;
}
}
 
keekkenen писал(а) >>
disons que dans la fonction GetProfitFromDateInCurrency() le paramètre int lt prend trois valeurs de drapeau


Merci, votre méthode de calcul des lots par modulo est correcte, je l'utiliserai plus tard... Mais voilà qui est intéressant, il s'avère que la fonction que j'ai affinée fonctionne... d'une certaine manière. J'ai ajouté Alert pour voir les changements de "p+=" et il calcule tout correctement. Mais la valeur ClOrdProf dont nous allons tirer des informations n'apparaîtra pas : Alert ("ClOrdProf= ",ClOrdProf) ;. Dans le code, cela ressemble à ceci :
int start()
{
........................
bool
ClOrdProf=false ; //valeur logique
........................
ClOrdProf=GetProfitFromDateInCurrency(",-1,-1,XTime,XLots) ; //appel de fonction
si (ClOrdProf==vrai)
Alert ("ClOrdProf=",ClOrdProf) ; - il n'est pas mis à jour dans le log
.........................
return ; //sortir de start()
}
// Fonction de calcul du profit des ordres fermés
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
double p=0 ;
int i, k=OrdersHistoryTotal() ;

si (sy=="0") sy=Symbole() ;
for (i=0 ; i<k ; i++) {
si (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
si ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
si (mn<0 || OrderMagicNumber()==mn) {
si (dt<OrderCloseTime()) {
si (OrderLots()==lt) {
p+=OrderProfit()+OrderCommission()+OrderSwap() ;
Alert ("p= ", p) ; - mise à jour dans le journal
}
}
}
}
}
}
}
retour(p) ;
}
Je n'arrive pas à comprendre ce qui ne va pas...

 

C'est drôle, n'est-ce pas, drôle... drôle pour vous et même pour moi... (Vladimir Semyonovich)
A l'origine, ClOrdProf n'est pas un bool mais un double. Et il devrait y avoir "if (ClOrdProf>0 || ClOrdProf<0)" - la deuxième partie, commençant par "ou", pour compter en cas de profit négatif... ce que j'appelle "œil lavé" - je n'ai pas vu tout de suite ce qui se trouve à la surface moi-même.
Merci à keekkenen pour son aide dans le calcul des lots pairs et impairs.
Merci à Igor, pour la possibilité d'améliorer sa fonction.

 
KimIV >>:

Функция TicketNearPos().

Эта функция возвращает тикет ближайшей к рынку позиции. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции TicketNearPos().
if (pp == 0) 
{return (ti);}
J'ai remarqué un bug dans la fonction TypeNearPos lorsque la condition est remplie :
Prix du marché = prix de l'ordre ouvert, alors cet ordre n'est plus pris en compte par cette fonction.
J'ai dû ajouter cette simple condition au code.
Cette condition sera également utile dans les fonctions similaires TypeNearPos() et PriceOpenNearPos().