[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 357

 
Zhunko:
Pourriez-vous afficher le code ? Peut-être un pseudo-code. Comment ça, sans commencer... ? C'est une fonction de base, comme main() en C++.

Cela dépend des tâches que vous allez résoudre et détermine l'emplacement de votre code dans le corps du programme EA. Personne ne nous oblige à conserver le code dans la fonction start() !

La fonction start() est l'une des trois fonctions prédéfinies dans notre modèle de code. Il doit être présent au moins !, parce que le programme parent - le programme terminal (c'est main(), le principal), en effectuant ses tâches principales, en recevant une nouvelle citation du serveur (en gros) il suffit de regarder dans votre fonction start et d'exécuter le code, qui est en elle, si elle sera juste return(), alors la fonction start s'arrêtera ici.

 
"Professionnels, ne passez pas à côté", :) veuillez partager un lien vers votre ressource d'information préférée (de préférence en langue russe), où le calendrier économique et d'autres choses utiles sont publiés. Si ces liens ne peuvent être postés ici, envoyez-les moi par MP.
 
aidez-moi à écrire.

s'il y a un signal d'achat
vérifier les ordres de vente ouverts
s'il y en a un, fermer
s'il n'y en a pas, ouvrir l'achat

s'il y a un signal de vente
vérifier les ordres d'achat ouverts
s'il y en a un, fermer
s'il n'y en a pas, ouvrir l'achat
 
frxmax:
aide à écrire ce qui suit.

s'il y a un signal d'achat
Vérifier les ordres de vente ouverts
si oui, fermez
s'il n'y a pas de signal d'achat

s'il y a un signal de vente
Vérifier les ordres d'achat ouverts
si oui, nous fermons
si aucun signal, réouverture de l'achat


Commencez à écrire vous-même - nous vous aiderons

voici un point de départ pour vous aider https://book.mql4.com/ru/

 
abolk:


Commencez à écrire vous-même - nous vous aiderons

voilà https://book.mql4.com/ru/

J'ai déjà "commencé".

total=OrdersTotal() ;
if(CONDITION d'ouvrir un ordre d'achat)
si(total<1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+100*Point, "Buy",1111,0,Green) ;
si(ticket<0)
{
Print("OrderSend a échoué avec l'erreur #",GetLastError()) ;
retour(0) ;
}
}sélection
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
si(OrderType()==OP_SELL)
OrderClose(NULL,Lot,Ask,3) ;
retour(0) ;
}
}

 
C'est presque ça, il suffit de vérifier d'abord et ensuite de le mettre en place.
 
frxmax:
aide à écrire ce qui suit.

s'il y a un signal d'achat
Vérifier les ordres de vente ouverts
si oui, fermer
S'il n'y a pas de signal, nous pouvons ouvrir un ordre d'achat.
//  в ф-ции старт 
  
if(....условие покупки....){
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     Ticket(OP_BUY);      }

//-----------------------
int CalculateOrders(string simbol,int type)
  {
   int count=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }

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

void Ord_Close(string simb,int type) {  double price;
   
   if(type==OP_BUY)  price=MarketInfo(simb, MODE_BID); else
   if(type==OP_SELL) price=MarketInfo(simb, MODE_ASK);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if( OrderSymbol()!=simb || OrderMagicNumber()!=mn) continue;
      //---- check order type 
      if(OrderType()==type)
        {  OrderClose(OrderTicket(),OrderLots(),price,3,White);   break;  }
        
        
     }   
     
     
 } 
//-----------------------------

int Ticket(int op){
      double pp = MarketInfo(Symbol(), MODE_POINT);
      double pBid = MarketInfo(Symbol(), MODE_BID);
      double pAsk = MarketInfo(Symbol(), MODE_ASK); 
      double open_price;
      double T;
      color col=NULL;
      int mn=0;
      
  if(op==0) {open_price=pAsk; col=Blue; T=pAsk+Take*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-Take*pp;}
  int res=OrderSend(Symbol(),op,0.1,open_price,0,0,T,NULL,mn,0,col); 

   return(res);               }
 
KONDOR:

Merci beaucoup pour votre aide, mais j'ai fait les choses un peu différemment et votre approche n'est pas très claire pour moi.

Pourriez-vous m'expliquer comment vendre tout ça ? Il y a beaucoup de choses que je ne comprends pas.

Vous avez été très utile.

 
frxmax:

J'ai essayé de tout retourner pour vendre - sans succès. Aucun commerce ouvert

Erreur 130. - Les arrêts ne sont pas corrects, alors où les avoir là ?

Maintenant, il ouvre un ordre pour chaque barre, mais j'ai besoin d'un seul.


total=OrdersTotal() ;

si(total<1)

etc.

 
KONDOR:


Hmm, j'ai approfondi le jeu - offres et demandes de changement etc... merci pour ça)

J'ai aussi réglé la question des arrêts.