edyuson: Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
sergeev:
faire un compteur int et ajouter +1 à chaque ouverture.
Une fois que la valeur correcte du compteur est définie, permettez de faire le lot*koef également.
Oui, ce n'est pas aussi facile que je le pensais, maintenant ça commence à se produire. Et le cycle : lot-0.01, lot-0.01, lot-0.01 et seulement après avoir multiplié lot-0.02, lot-0.02, lot-0.02 encore : lot-0.04, lot-0.04, lot-0.04 .... doit être interrompue par le profit et se poursuivre par des lots. Les gars de l'autre forum ont présenté quelques variantes à ce sujet : Vous pourriez déclarer le double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1 . 0, 1.0, 2.0 .......} - comme un tableau, en le remplissant avec les coefficients requis, et une variable statique ou globale int k=0 ; Alors lot=lot*koef[k++] ; Série de départ : k=0 ;
et ainsi de suite : int k = 1 ; int koef = 3 ; if (k/koef == k) { lot*=2 ; k++ ; } mais tout est faux.
J'ai essayé un compteur comme : int j ; for(j=0 ; j<15 ; j++) , mais encore une fois ce n'est pas la même chose. Voici tout : int X=0 ; double S = 0.0000 ; extern double lot=0.01 ; extern double koef=2.0 ; extern int SL=30 ; extern int TP=120 ; double dl ; double a ; int init() { a=lot ; return(0) ; } int deinit() { return(0) ; }
Merci, mais regardez, il y a deux prix, l'un est le prix d'ouverture de l'ordre, et l'autre est le prix du stop loss, le nombre de points du stop loss et le prix du point sont connus. Comment calculer la taille du lot pour que la perte soit de 10 % du dépôt si le prix atteint le stop loss ? Je ne suis pas doué pour les chiffres.
Je ne comprends pas non plus
Pour les taux croisés, la valeur du point, exprimée en dollars, est calculée par la formule PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE, où LOT_SIZE est la taille du lot, TICK_SIZE est la taille du tick, BASE_QUOTE est la cotation actuelle de la devise de base (première) par rapport au dollar US, CURRENT_QUOTE est le taux actuel de la paire.
Comment comprendre cette première monnaie par rapport au dollar américain ?
la (première) devise de base par rapport au dollar américain, soit, dans l'exemple GBP/JPY - GBP/JPY,GBP/USD.
J'ai refait ce script, qui est ce dont vous avez besoin avec le calcul du volume de la position négociée, en fonction du montant du capital et de la taille du stop loss.
Vous en avez également besoin - "J'ai été confronté à un problème et je me débats depuis trois jours déjà sans pouvoir le résoudre. Dans l'Expert Advisor terminé j'ai décidé au lieu d'un lot d'entrer le % de risque, donc j'ai besoin de calculer le lot à arrêter, par exemple à 10 000 dépo le risque de 1% à un arrêt de 100 points il sera d'environ 0,1 lot et ici à 200 lot arrêt le lot devrait être 0,05, donc le risque de 1% est resté au même niveau. J'espère que tout est clair. Et vous voilà en train d'écrire :
"Comment calculer la taille du lot pour que la perte soit égale à 10 % du dépôt, par exemple, si le prix atteint le stop loss ? Je ne suis pas doué avec les chiffres. "
J'ai donc modifié la fonction de calcul du lot du tutoriel - sa description et son approche sont les mêmes, mais au lieu de calculer le lot en pourcentage de la taille du dépôt, le lot négocié est calculé en fonction de vos conditions (données par moi dans cet exemple - voir le script ci-dessus) :
externstring A0 = "Параметры ММ и мониторинга";
externdouble Lots = 0; // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лоссаexternint StopLoss = 1000;
externint TakeProfit =4000; // TakeProfit для новых ордеров (пунктов)externdouble MaxRisk = 10; // риск на капитал в %// рассчитываем объем позиции взависимости от размера стопа, при заданном риске// например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,// при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровнеint start()
{
//----------------------------------СТАРТ-------------------------------------------------------------------------------------
// ...
//----------------------------------Расчет объема лота------------------------------------------------------------------------ if (Lot(StopLoss)==false)
{
Comment(" Пополните счет. Не хватает средств на минимальный лот. Советник остановлен.");// Если средств не хватает на мин, то выходPrint ("Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin());
// Если средств не хватает на мин, то выходreturn (0);
}
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...
Lots_New = NormalizeLots(Lots_New);
//... здесь условия на открытие поз и установка ордеров
}//------------------------------------------Конец Старт-----------------------------------------------------//+------------------------------------------------------------------+//| Нормализация лота |//+------------------------------------------------------------------+double NormalizeLots(double lot)
{
double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;
lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));
return (lots);
}
//--------------------------------------------------------------------// Lot.mqh// //--------------------------------------------------------------- 1 --// Функция вычисления количества лотов.// Глобальные переменные:// double Lots_New - количество лотов для новых ордеров (вычисляется)// double Lots - желаемое количество лотов, заданное пользовател.// double MaksRisk - процент риска// Возвращаемые значения:// true - если средств хватает на минимальный лот// false - если средств не хватает на минимальный лот//--------------------------------------------------------------- 2 --bool Lot(int sl) // Позовательская ф-ия
{
string Symb =Symbol(); // Финансовый инструм.double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Стоим. 1 лотаdouble Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Мин. размер. лотовdouble Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
double Step =MarketInfo(Symb,MODE_LOTSTEP);//Шаг изменен размераdouble Free =AccountFreeMargin(); // Свободные средстваdouble LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота//--------------------------------------------------------------- 3 --if (Lots > 0) // Лоты заданы явно..
{ // ..проверим этоdouble Money=Lots*One_Lot; // Стоимость ордераif(Money<=AccountFreeMargin()) // Средств хватает..
Lots_New=Lots; // ..принимаем заданноеelse// Если не хватает..
Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Расчёт лотов
}
//--------------------------------------------------------------- 4 --else// Если лоты не заданы
{ // то берём процент // Желаем. колич.лотов:
Lots_New =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step;
if(Lots_New<Min_Lot) Lots_New=Min_Lot;
if(Lots_New>Max_Lot) Lots_New=Max_Lot;
Print ("Lot_New в ф-ии Lots = ",Lots_New, "ширина канала = ",sl, "Point = ",Point);
}
//--------------------------------------------------------------- 5 --if (Lots_New < Min_Lot) // Если меньше допуст..
Lots_New=Min_Lot; // .. то миниамальныйif (Lots_New*One_Lot > AccountFreeMargin()) // Не хватает даже..
{ // ..на минимальн. лот:(Print ("Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin()); // Сообщение..return(false); // ..и выход
}
return(true); // Выход из польз. ф-ии
}
//--------------------------------------------------------------- 6 --
J'ai essayé cette méthode. Maintenant, pendant toute la période de test, un ordre STOPLOSS en attente s'est ouvert et c'est tout... peut-être mon terminal est-il défaillant ?
Le programme est censé trouver les prix maximum et minimum chaque jour, de 7 à 9 heures, et placer un ordre stop à ces niveaux.
J'ai essayé cette méthode. Maintenant, pendant toute la période de test, un ordre STOPLOSS en attente s'est ouvert et c'est tout... peut-être mon terminal est-il défaillant ?
Avez-vous des difficultés à regarder dans le journal pour voir ce qui pose problème ?
J'ai un compte de démonstration avec un EA avec un code sur le graphique :
Il écrit dans le journal : "C'est une démo.
J'ai une démo sur un phibogroupe - pour une raison mystérieuse, il dit que je suis sur un compte réel. Dans votre version, il est indiqué - Ceci n'est pas une démo.
Il s'avère que d'une certaine manière le DC lui-même est perverti.
edyuson:
sergeev:Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.
faire un compteur int et ajouter +1 à chaque ouverture.
Une fois que la valeur correcte du compteur est définie, permettez de faire le lot*koef également.
Oui, ce n'est pas aussi facile que je le pensais, maintenant ça commence à se produire. Et le cycle : lot-0.01, lot-0.01, lot-0.01 et seulement après avoir multiplié lot-0.02, lot-0.02, lot-0.02 encore : lot-0.04, lot-0.04, lot-0.04 .... doit être interrompue par le profit et se poursuivre par des lots. Les gars de l'autre forum ont présenté quelques variantes à ce sujet : Vous pourriez déclarer le double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1 . 0, 1.0, 2.0 .......} - comme un tableau, en le remplissant avec les coefficients requis, et une variable statique ou globale int k=0 ;
Alors lot=lot*koef[k++] ; Série de départ : k=0 ;
et ainsi de suite :
int k = 1 ;
int koef = 3 ;
if (k/koef == k) { lot*=2 ; k++ ; } mais tout est faux.
J'ai essayé un compteur comme : int j ;
for(j=0 ; j<15 ; j++)
, mais encore une fois ce n'est pas la même chose. Voici tout :
int X=0 ;
double S = 0.0000 ;
extern double lot=0.01 ;
extern double koef=2.0 ;
extern int SL=30 ;
extern int TP=120 ;
double dl ;
double a ;
int init()
{
a=lot ;
return(0) ;
}
int deinit()
{
return(0) ;
}
int start()
{
if(OrdersTotal() == 0 && X==1)
{
if (Close[0]>dl){lot=a;}
X=0 ;
}
if(OrdersTotal() == 0 && X==2)
{
if (Close[0]<dl){lot=a;}
X=0 ;
}
si (OrdersTotal() == 0 && Close[1]>Open[1])
{
dl=Close[0] ;
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,",14774,0,Blue) ;
//--------------------------------------------------------------------
lot=lot*koef ;
X=1 ;
}
if(OrdersTotal() == 0 && Close[1]<Open[1])
{
dl=Close[0] ;
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,",14774,0,Red) ;
//sudy some haler may help
lot=lot*koef ;
X=2 ;
}
}
return(0) ;
//C'est juste un martin
Merci, mais regardez, il y a deux prix, l'un est le prix d'ouverture de l'ordre, et l'autre est le prix du stop loss, le nombre de points du stop loss et le prix du point sont connus. Comment calculer la taille du lot pour que la perte soit de 10 % du dépôt si le prix atteint le stop loss ? Je ne suis pas doué pour les chiffres.
Je ne comprends pas non plus
Pour les taux croisés, la valeur du point, exprimée en dollars, est calculée par la formule
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
où LOT_SIZE est la taille du lot, TICK_SIZE est la taille du tick, BASE_QUOTE est la cotation actuelle de la devise de base (première) par rapport au dollar US, CURRENT_QUOTE est le taux actuel de la paire.
Comment comprendre cette première monnaie par rapport au dollar américain ?
Oui... serré... :-)
la (première) devise de base par rapport au dollar américain, soit, dans l'exemple GBP/JPY - GBP/JPY,GBP/USD.
J'ai refait ce script, qui est ce dont vous avez besoin avec le calcul du volume de la position négociée, en fonction du montant du capital et de la taille du stop loss.
Vous en avez également besoin - "J'ai été confronté à un problème et je me débats depuis trois jours déjà sans pouvoir le résoudre. Dans l'Expert Advisor terminé j'ai décidé au lieu d'un lot d'entrer le % de risque, donc j'ai besoin de calculer le lot à arrêter, par exemple à 10 000 dépo le risque de 1% à un arrêt de 100 points il sera d'environ 0,1 lot et ici à 200 lot arrêt le lot devrait être 0,05, donc le risque de 1% est resté au même niveau. J'espère que tout est clair. Et vous voilà en train d'écrire :
"Comment calculer la taille du lot pour que la perte soit égale à 10 % du dépôt, par exemple, si le prix atteint le stop loss ? Je ne suis pas doué avec les chiffres. "
J'ai donc modifié la fonction de calcul du lot du tutoriel - sa description et son approche sont les mêmes, mais au lieu de calculer le lot en pourcentage de la taille du dépôt, le lot négocié est calculé en fonction de vos conditions (données par moi dans cet exemple - voir le script ci-dessus) :
J'ai essayé cette méthode. Maintenant, pendant toute la période de test, un ordre STOPLOSS en attente s'est ouvert et c'est tout... peut-être mon terminal est-il défaillant ?
Le programme est censé trouver les prix maximum et minimum chaque jour, de 7 à 9 heures, et placer un ordre stop à ces niveaux.
J'ai essayé cette méthode. Maintenant, pendant toute la période de test, un ordre STOPLOSS en attente s'est ouvert et c'est tout... peut-être mon terminal est-il défaillant ?
Bonjour.
Quelqu'un a-t-il eu des problèmes avec la fonction
IsDemo()?
Je n'obtiens toujours qu'un seul résultat - que le compte est réel (qu'il soit réel ou démo).
Bonjour.
Quelqu'un a-t-il eu des problèmes avec la fonction
?
J'obtiens toujours un seul résultat : mon compte est réel (qu'il soit réel ou démo).
J'ai mis un EA sur un graphique avec un code sur un compte de démonstration:
Ecrit dans le magazine : "C'est une démo.J'ai un compte de démonstration avec un EA avec un code sur le graphique :
Il écrit dans le journal : "C'est une démo.J'ai une démo sur un phibogroupe - pour une raison mystérieuse, il dit que je suis sur un compte réel. Dans votre version, il est indiqué - Ceci n'est pas une démo.
Il s'avère que d'une certaine manière le DC lui-même est perverti.
J'ai une démo sur phibogroup - pour une raison mystérieuse, il est dit que je suis sur real. Dans votre version de l'image - Ce n'est pas une démo.
Il s'avère que d'une certaine manière, le DC lui-même est devenu pervers.
Certains courtiers ont un seul serveur pour la démo et le réel. Vérifiez auprès du service d'assistance de votre courtier.
Merci.