Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1097

 
alvlaf:

Le dernier code que vous avez donné est un pas en avant - il n'ouvre aucune transaction (l'interdiction est donc en vigueur). Je n'ai pas encore compris pourquoi il n'y en a pas du tout. Vous trouverez ci-joint une capture d'écran du journal.

Au départ, la variable s'appelait ProfitableSerie et avait une fonction opposée. Et j'ai autre chose à ajouter.

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...

 
Bonjour à tous, j'ai commencé à lire le tutoriel de MQL4 (je veux apprendre à programmer), mais c'est une ancienne version, que conseillez-vous de faire ? Lire le tutoriel et ensuite la documentation ?
 
LRA:
// ИХМО так нагляднее
D'accord !
 
linar:

Bonjour, j'ai commencé à lire le tutoriel MQL4 (je veux apprendre à programmer), mais c'est une ancienne version, que me conseillez-vous de faire ?

Si vous avez déjà programmé en C, il est préférable de consulter le code source des indicateurs gratuits, des indicateurs plus simples et des Expert Advisors et de lire l'aide.

Si vous n'avez pas programmé du tout, alors... Si vous ne savez pas du tout comment programmer, lisez la documentation. )))

Il existe également un tutoriel sur ce forum : https://www.mql5.com/ru/forum/108883.

 
A13ksandr:

C'est juste qu'au départ la variable s'appelait ProfitableSerie et avait la fonction inverse. Et il y a autre chose à ajouter.

Essayez de cette façon. J'ai le sentiment que quelque chose d'autre va surgir...

Un autre pas en avant - le robot a ouvert une transaction, mais ça s'arrête là. Rien d'autre ne s'ouvre et il n'y a même pas de message dans le journal concernant une quelconque tentative...
 
alvlaf:
Un autre pas en avant - le robot a ouvert une transaction, mais cela s'est arrêté là. Le robot n'ouvre rien d'autre et il n'y a pas de messages dans le journal concernant des tentatives...

Je voulais mettre seulement une partie du code correctement, mais ensuite j'ai copié tout le code et cela n'a pas résolu l'erreur. Il devrait être comme ça dans la dernière condition.

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)

Updade : ramener OnDeinit juste au cas où.

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

Mince, je voulais insérer seulement une partie du code correct à l'origine, mais ensuite j'ai copié le tout et je n'ai pas corrigé cette erreur. Cela devrait être comme ça dans la dernière condition

Mais en fait, il n'aurait pas dû conclure un seul accord à ce moment-là. Certaines des deux premières conditions ne fonctionnent pas correctement. Fixez la condition pour l'instant, voyons voir :)

Updade : ramener OnDeinit juste au cas où.


J'ai essayé, après une transaction en moins, j'ai commencé à ouvrir une position à chaque tick.
 
alvlaf:
J'ai essayé, après une transaction en moins, j'ai commencé à ouvrir une position à chaque tick.

Mettez les deux premières conditions sur la première ligne

si(GlobalVariableGet("AllowNewOrders") == 1) retour ;

Et essayez le premier test sur une paire.

Le courtier GrandCapital ?

 
A13ksandr:

Mettez les deux premières conditions sur la première ligne

si (GlobalVariableGet("AllowNewOrders") == 1) retour ;

Et essayez le premier test sur une paire.

Courtier GrandCapital ?

//----------------------------------------------------------------------
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1) ;
return(INIT_SUCCEED) ;
}

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

void OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1) ;
}
//----------------------------------------------------------------------

void OnTick()
{
si (GlobalVariableGet("AllowNewOrders") == 1) retour ;
{
if (CountTrades() == 0) // Le nombre d'ordres doit être égal à zéro
{
si ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// Si la dernière transaction est perdante, la même est ouverte, mais avec un lot plus important.
{
GlobalVariableSet("AllowNewOrders", 0) ;
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = Demande ;
if (Type == OP_SELL) Price = Bid ;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2) ;
ticket = OrderSend(Symbol(), Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
retour ;
}
si (GlobalVariableGet("AllowNewOrders") == 1) retour ;
{
si (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// si le bénéfice de la dernière transaction est égal à zéro, la même transaction sera ouverte.
{
GlobalVariableSet("AllowNewOrders", 0) ;
Type = TypeLastHistOrder() ;
if (Type == OP_BUY) Prix = Demande ;
if (Type == OP_SELL) Price = Bid ;
Lot = NormalizeDouble(LotsLastHistOrder(), 2) ;
ticket = OrderSend(Symbol(), Type, Lot, Prix, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
retour ;
}
si ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// Si la dernière transaction est profitable, l'ordre est ouvert.
{
si (GlobalVariableGet("AllowNewOrders") == 0) retour ;
si (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0) ;
retour ;
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic) ;
if (ticket>0) GlobalVariableSet("AllowNewOrders", 0) ;
retour ;
}
}
}
GlobalVariableSet("AllowNewOrders", 1) ;
}
}

}

Oui, Grand Capital. Tu l'as bien mis en place ? Il a cessé d'ouvrir des transactions à nouveau.

 

Les gars, je me suis déjà creusé les méninges. Comment faire pour que l'EA place des ordres en attente sur les hauts et les bas, par exemple 8 bougies, avec un take profit de 1/4.

Je fais quelque chose comme ça :

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0) ;

double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0) ;

double TP=((Vhod1-Vhod2)/4)+Vhod1 ;


J'ai essayé de modifier les paramètres, mais je continue à obtenir des arrêts erronés ou à fixer le prix à 7.00000 ; on ne sait pas très bien d'où cela vient.

Raison: