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

 
ssn1:
Je suis habitué à mon propre système d'archivage.
J'ai déjà survécu sans encombre avec le Keeper : la destruction du disque dur de mon PC, la panne de mon ordinateur portable. Et je n'ai pas perdu un seul octet de mon code. Le coffre-fort est pratique.
 

Bon après-midi.

J'ai écrit un programme d'exercices. Ça ne marche pas pour une raison quelconque.

Je l'ai testé dans le testeur de stratégie entre le 29 septembre et le 15 octobre.

Le programme devrait fonctionner comme suit : je fais un achat. Lorsque le prix baisse de 0,010, il doit vendre avec une perte.

Un achat a lieu. Il n'y a pas de vente. Je commence à visualiser et je vois que le prix n'est pas seulement inférieur de 0,010 mais bien supérieur. Étrange.

// -------- variables --- Démarrer -----
extern double L1=0.01 ; // taille du lot pour l'achat
extern double L1n=0.01 ; // taille du lot pour l'achat (lot normalisé)
extern double AktualAsk=0.0 ; // prix d'offre actuel
extern double AktualBid=0.0 ; // prix de vente réel
extern int ticketlackmus=1 ; // indicateur de réussite de l'ouverture d'un ordre.
extern int ticket1=0 ; // ticket
extern bool PozOtk1=true ;
// -------- variables --- Fin -----
int init()
{
retour(0) ;
}


int start()
{
si (PozOtk1==vrai)
{
//position ouverte
ticketlackmus=1 ;
while (ticketlackmus>0)
{
Alerte (" Ouvrir la première position ") ;
RefreshRates() ;// Rafraîchir les données
AktualAsk=NormalizeDouble(Ask,Digits) ; //pour le prix
L1n=NormalizeDouble(L1,2) ; //pour le lot.
ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, 0, CLR_NONE) ;
si (ticket1>0) ticketlackmus=-1 ;
{
Alerte (" ORDER OPEN ", ticket1, ", ticketlackmus) ;
}
}
PozOtk1=false ;
Alerte (" PozOtk1 ", PozOtk1) ;
}

RefreshRates() ;// RefreshRates()
AktualBid=NormalizeDouble(Bid,Digits) ; //pour le prix
si (AktualBid<=AktualAsk-0.010 && PozOtk1==false)
{
RefreshRates() ; // Rafraîchir les données
OrderSelect(ticket1, SELECT_BY_TICKET ;)
L1n=NormalizeDouble(L1,2) ; //pour le lot
OrderClose (ticket1, L1n, AktualBid, 5) ;
PozOtk1=vrai ;
}

retour(0) ;
}

int deinit()
{
retour(0) ;
}


Ozero.

 

Veuillez utiliser le bouton magique SRC lorsque vous insérez un code :

Insérer le code correctement dans le forum

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid<=AktualAsk-0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 

 

Si une position est ouverte sur un certain symbole (dans ce cas - "GBPUSD"), il est conseillé de prendre toutes les données sur ce symbole via marketinfo, c'est-à-dire pas seulement AktualAsk=NormalizeDouble(Ask,Digits ) ; aktualAsk=MarketInfo( "GBPUSD",MODE_ASK) ;

Et donc toutes les données du marché devraient être prises, afin d'éviter.

 
// -------- переменные --- Н -----
extern double L1=0.01;            // размер лота для покупки 
extern double L1n=0.01;           // размер лота для покупки 
extern double AktualAsk=0.0;
extern double AktualBid=0.0;
extern int ticketlackmus=1;       // "лакмусовая бумажка" успешности откарытия ордера
extern int ticket1=0;             // тикет 
extern bool PozOtk1=true;
// -------- переменные --- К ----- 
int init() 
   {
      return(0);
   }


int start()    
   {
      if (PozOtk1==true) 
         {     
// Открытие позиции
             ticketlackmus=1;
             while (ticketlackmus>0)
                {
     Alert (" Открытие первой позиции ");
                   RefreshRates();                                        // Обновление данных 
                   //AktualAsk=NormalizeDouble(Ask,Digits); //для цены
                   AktualAsk=MarketInfo( "GBPUSD",MODE_ASK);
                   L1n=NormalizeDouble(L1,2); //для лота.
                   ticket1=OrderSend ("GBPUSD", OP_BUY, L1n, AktualAsk, 5, 0, 0, 0, 0, CLR_NONE);    
                   if (ticket1>0) ticketlackmus=-1;
                   {
                   Alert (" ОРДЕР ОТКРЫТ ", ticket1, "  ", ticketlackmus);
                   }
                }
             PozOtk1=false; 
             Alert (" PozOtk1 ", PozOtk1);
          }

      RefreshRates();                                        // Обновление данных 
      AktualBid=NormalizeDouble(Bid,Digits); //для цены
           if (AktualBid>=AktualAsk+0.010 && PozOtk1==false)
       {                              
                     RefreshRates();    // Обновление данных 
                     OrderSelect(ticket1, SELECT_BY_TICKET);   
                     L1n=NormalizeDouble(L1,2); //для лота
                     OrderClose (ticket1, L1n, AktualBid, 5);
                     PozOtk1=true; 
       }

return(0);
   }



int deinit()                                   
   {
      return(0);
   } 
evillive:

Si une position s'ouvre sur un symbole spécifique (dans ce cas - "GBPUSD"), il est souhaitable de prendre toutes les données également sur ce symbole via marketinfo, c'est-à-dire pas seulement AktualAsk=NormalizeDouble(Ask,Digits) ; aktualAsk=MarketInfo( "GBPUSD",MODE_ASK) ;

Et donc toute donnée du marché devrait être prise, pour éviter.

Merci, Evillive !

J'ai fait des changements. Mais j'ai déjà commencé à acheter. Pas de vente après les changements. Test M15 du 30 septembre 2014 à la mi-octobre.



 
Ozero:

Merci Evillive !

J'ai fait le changement. Mais, l'achat se faisait quand même. Après les changements, aucune vente n'a lieu. Test M15 du 30 septembre 2014 à la mi-octobre.



Trouvez où dans le code ci-dessus il pourrait y avoir une vente
 
OrderClose (ticket1, L1n, AktualBid, 5);
 
Ozero:
C'est la clôture de la commande. Où se trouve l'ouverture de l'ordre de vente. Il n'est pas dans le code ci-dessus
 
Je voulais dire que l'ordre ne se ferme pas :( Désolé si je ne l'ai pas exprimé de cette façon, je suis un débutant.