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

 
TarasBY:

Je n'ai pas travaillé avec cette fonction. L'hypothèse est que si le terminal sélectionne un caractère une fois, la tentative suivante de sélectionner le même caractère peut retourner un faux. Essayez d'ignorer la vérification du retour par cette fonction.

Il s'avère que SymbolSelect("AUDUSD", true) renvoie true seulement si AUDUSD n'est pas dans MarketWatch - c'est-à-dire, quand la paire est ajoutée à MarketWatch. Une fois que la paire est dans MarketWatch, les appels suivants retournent faux.

Ce comportement ne correspond pas du tout au manuel de cette fonction.

J'ai dû utiliser une fonction auto-écrite qui scanne tous lesSymbolName(i, true) pour i=0...SymbolsTotal(true).

 
Mr.Profit:

Il s'avère que SymbolSelect("AUDUSD", true) renvoie true seulement si AUDUSD n'est pas dans MarketWatch - c'est-à-dire quand la paire est ajoutée à MarketWatch. Une fois que la paire est dans MarketWatch, les appels suivants retournent faux.

Ce comportement ne correspond pas du tout au manuel de cette fonction.

Quelque chose me dit que nous pouvons nous passer de SymbolSelect().
 
TarasBY:
Quelque chose me dit que vous pouvez vous passer de SymbolSelect().

Oui, je viens de mettre à jour mon message ci-dessus
 
borilunad:

C'est quoi l'autre, ou on devrait déjà faire un tour sur celui-là ? !


Master Forex

 
laveosa:
il m'a fallu 4 mois pour faire une chouette sur alpari..... le code nano quanto est très putain de chronophage et pas petit..... et maintenant tout est ! !!!! c'est une honte .... Je ne suis pas sûr de ce qu'il faut en faire.

Troisième hibou et toujours la même erreur, heureux que le problème ne soit pas avec le code :)
 
Voilà le truc, j'ai mis un nouveau "Non" ( c'estun câble en fibre de verre à haut débit avec une vitesse de téléchargement de 7mb par seconde.) et après cela j'ai eu la même chose avec Alpari, mais avec Master Forex tout est OK et Admeral aussi .......... voici une autre nuance, le broker est installé sur le disque D :) lors de la réinstallation de l'OS, je n'ai pas installé un nouveau système et utilisé l'ancien .... Je devrais peut-être l'installer ?
 
laveosa:


Master Forex


Merci, je vais regarder !
 
borilunad:

Merci, je vais regarder !

Je ne fais pas campagne, je réponds simplement à une question :)
 

Bonjour à tous. J'ai commencé à écrire des EA il n'y a pas si longtemps. J'ai été confronté à un problème apparemment élémentaire, que je ne parviens pas à résoudre. Veuillez m'aider.

Le problème. Lors d'un nouveau tick, je perds la valeur d'une variable.

Brève description. Assignez à une variable la valeur de retour de la fonction OrderSend() et sortez en utilisant la commande return. Au prochain tick, la valeur de la variable devient égale à zéro.

L'élément clé du code source. Le code source complet ci-dessous.

si (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red) ;
Alert ("Assigned value to ticket_sell variable ", ticket_sell) ;
retour ;
}
}

Alert ("Position existante = ", position_existante, "Ordre d'achat ", ticket_buy, "Ordre de vente ", ticket_sell) ;

Résultat.

La capture d'écran montre que la position a été ouverte avec succès et que le ticket d'ordre a été mémorisé dans la variable ticket_sell. Cependant, la variable ticket_sell devient nulle au prochain tick. Et je ne peux pas modifier/supprimer la commande sur le ticket.

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

Bonjour à tous. J'ai commencé à écrire des EA il n'y a pas si longtemps. J'ai été confronté à un problème apparemment élémentaire, que je ne parviens pas à résoudre. Veuillez m'aider.

Le problème. Lors d'un nouveau tick, je perds la valeur d'une variable.

Brève description. Assignez à une variable la valeur de retour de la fonction OrderSend() et sortez en utilisant la commande return. Au prochain tick, la valeur de la variable devient égale à zéro.

L'élément clé du code source. Le code source complet ci-dessous.

si (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red) ;
Alert ("Assigned value to ticket_sell variable ", ticket_sell) ;
retour ;
}
}

Alert ("Position existante = ", position_existante, "Ordre d'achat ", ticket_buy, "Ordre de vente ", ticket_sell) ;

Résultat.

La capture d'écran montre que la position a été ouverte avec succès et que le ticket d'ordre a été mémorisé dans la variable ticket_sell. Cependant, la variable ticket_sell devient nulle au prochain tick. Et je ne peux pas modifier/supprimer la commande sur le ticket.


Pour éviter de perdre la valeur, nous avons besoin d'une variable globale, mettez sa déclaration en dehors deOnTick() ou rendez-la statique