if ((Opb==0) && (MA_1_t > MA_2_t + Rastvor*Point)) // Если разница между
{ // ..МА 1 и 2 большая
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
Opb++;// Открытие только одного ордера
Ops=0;
if (VKO1>=Ask) {VP=VP*Koff;} // При прибыли предыдущего умножать на коэф.
if (VKO1<Ask) {VP=VP*Koff1;}// При убытке предыдущего умножать на коэф1.
}
if ((Ops==0) && (MA_1_t < MA_2_t - Rastvor*Point)) // Если разница между
{ // ..МА 1 и 2 большая
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
Ops++;// Открытие только одного ордера
Opb=0;
if (VKO0<=Bid) {VP=VP*Koff;} // При прибыли предыдущего умножать на коэф
if (VKO0>Bid) {VP=VP*Koff1;}// При убытке предыдущего умножать на коэф1
}
if ((Opn_S==true)||(Opn_B==true)) // Если есть сигнал на открытие ордера
{// Вычисляем объем умножая на VP
if (AccountBalance()<50000) Vol=Opn_Lots*VP;
if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
}
Je n'arrive pas à trouver où se trouve l'erreur, veuillez me conseiller. Il dit "pas assez d'argent pour acheter Lts=1.#INF"
C'est le problème... Le nombre de lots croît à l'infini, c'est-à-dire que l'augmentation du volume est bouclée, et par code, il s'avère que c'est une augmentation ponctuelle...
Après cela pour être clair voir ci-dessous. et donc la même chose avec Sell
if (Total==0 && Opn_B==true) // Открытых орд. нет
{ // критерий откр. BuyRefreshRates(); // Обновление данных
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Миним. колич. лотов
Free =AccountFreeMargin(); // Свободн средства
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Стоимость 1 лота
Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
Lts=MathFloor(Vol); // Для открытия Alert ("Lts ", Lts);
if(Lts < Min_Lot) Lts=Min_Lot; // Не меньше минимальнif (Lts*One_Lot < Free) Alert(" Не хватает денег на ", Lts," лотов"); // Лот дороже свободн.
SL=Ask-StopLoss_Open*Point; // Вычисление SL откр.
TP=Ask+TakeProfit_Open*Point; // Вычисление TP откр.Alert("Попытка открыть Buy. Ожидание ответа..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP); //Открытие Buyif (Ticket > 0) // Получилось :)
{
Alert ("Открыт ордер Buy ",Ticket);
VKO0=Ask; Opn_B =false; KO++;
Alert ("Цена открытия =", VKO0);
}
if (Fun_Error(GetLastError())==1) // Обработка ошибокcontinue; // Повторная попытка
}
C'est le problème... Le nombre de lots croît à l'infini, c'est-à-dire que l'augmentation du volume est bouclée, et par code, il s'avère que c'est une augmentation ponctuelle...
Après cela pour être clair voir ci-dessous. et donc la même chose avec Sell
Essayez
if (Fun_Error(GetLastError())==0) // Нет ошибкиbreak;
S'il y a une erreur, il essaiera simplement d'ouvrir à nouveau une position sur un nouveau tick. A propos, on m'a expliqué ici sur ce forum (p. 90-91) qu'il est conseillé de ne pas utiliser l'opérateur && (et) dans if.
Quelqu'un sait-il comment convertir le nombre de pips en monnaie ?
c'est-à-dire que si le bénéfice est en unités de monnaie, alors 50 pips doivent être convertis en unités de monnaie... c'est-à-dire que l'effet de levier doit être pris en compte... ? 0_о
paladin80, le problème n'est pas d'ouvrir une commande... il fonctionne bien... J'ai écrémé cette partie pour préciser quelles variables du post du 01.05.12 19:15 ont été utilisées par la suite...
le problème est le suivant (voir ci-dessous), c'est une exécution unique et pour une raison quelconque, le Vol augmente à l'infini, donc le Lts augmente à l'infini... ce n'est pas clair... veuillez voir le message en question et dites-moi ce qui ne va pas...
if ((Opn_S==true)||(Opn_B==true)) // Если есть сигнал на открытие ордера
{ // Вычисляем объем умножая на VPif (AccountBalance()<50000) Vol=Opn_Lots*VP;
if (AccountBalance()>50000) Vol=2*Opn_Lots*VP;
}
Et vérifier si le dépôt est suffisant ? https://docs.mql4.com/ru/constants/marketinfo
Et vérifiez le lot sur la sortie ?
C'est le problème... Le nombre de lots croît à l'infini, c'est-à-dire que l'augmentation du volume est bouclée, et par code, il s'avère que c'est une augmentation ponctuelle...
Après cela pour être clair voir ci-dessous. et donc la même chose avec Sell
il s'agit d'un "cas unique" ?
Cap, c'est évident, il y a un cycle.
Bonjour !
Je ne trouve pas de réponse à la question suivante :
Si un ordre en attente est exécuté, son type reste le même que celui de l'ordre en attente, ou est-il changé en OP_BUY ou OP_SELL ?
C'est le problème... Le nombre de lots croît à l'infini, c'est-à-dire que l'augmentation du volume est bouclée, et par code, il s'avère que c'est une augmentation ponctuelle...
Après cela pour être clair voir ci-dessous. et donc la même chose avec Sell
Si un ordre en attente est exécuté, est-il toujours le même que l'ordre en attente, ou est-il changé en OP_BUY ou OP_SELL ?
Quelqu'un sait-il comment convertir le nombre de pips en monnaie ?
c'est-à-dire que si le bénéfice est en unités de monnaie, alors 50 pips doivent être convertis en unités de monnaie... c'est-à-dire que l'effet de levier doit être pris en compte... ? 0_о
paladin80, le problème n'est pas d'ouvrir une commande... il fonctionne bien... J'ai écrémé cette partie pour préciser quelles variables du post du 01.05.12 19:15 ont été utilisées par la suite...
le problème est le suivant (voir ci-dessous), c'est une exécution unique et pour une raison quelconque, le Vol augmente à l'infini, donc le Lts augmente à l'infini... ce n'est pas clair... veuillez voir le message en question et dites-moi ce qui ne va pas...