[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 369

 
Couleur MA Orlova.
 
Merci.
 

J'ai encore du mal à comprendre les fonctions commerciales, mais je m'y connais un peu en programmation.

il serait bon pour moi d'implémenter ce type d'algorithme avec votre aide :

si (condition d'achat)

s'il y a un ordre ouvert

si cet ordre porte sur la paire dans laquelle la condition d'achat s'est déclenchée.

s'il s'agit d'un ordre de vente

le fermer

ouvrir un ordre d'achat.

Aidez-moi à écrire, je suis fatigué. J'ai lu beaucoup de choses, mais je ne comprends pas encore.

 
frxmax:

J'ai encore du mal à comprendre les fonctions commerciales, mais je m'y connais un peu en programmation.

Il serait bon pour moi de mettre en œuvre ce type d'algorithme avec votre aide :

1. si (condition d'achat)

2. s'il y a un ordre ouvert

2.1. si cet ordre porte sur la paire où la condition d'achat a été déclenchée

2.2. s'il s'agit d'un ordre de vente

3. le fermer

4. Ouvrez un ordre d'achat.

Aidez-moi à écrire, je suis fatigué. J'ai lu beaucoup de choses, mais je ne comprends toujours pas.


1. Quelle est la condition pour acheter ?

2. On fait une boucle par les ordres de marché du terminal

2.1 Dans la boucle (point 2), nous vérifions sur quelle paire l'ordre sélectionné est ouvert et si c'est la bonne, alors ...

2.2. vérifier le type de l'ordre sélectionné et s'il s'agit d'un ordre de vente ...

3. Fermer la commande sélectionnée

Ouvrir un ordre d'achat

Ou avez-vous besoin du code complet ? Il ne s'agit pas d'une aide, mais d'une faveur baissière. Cependant... Si cela ne fonctionne pas - je vais écrire, mais pas de problème...

 

Oui, j'ai écrit et aidé. et "chacun a sa propre vérité" sur cette question.

voici ma version

if (LoCurent>LoPrevious && FtCurent>FtPrevious)
      {
       ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,0,Green);
       if(ticket>0)
          {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
          }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
// условие ПРОДАЖИ 
   if(LoCurent<LoPrevious && FtCurent<FtPrevious)
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,0,Red);
        if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
        else Print("Error opening SELL order : ",GetLastError()); 
        return(0); 
        }    
    return(0);
 // ЗАКРЫТИЕ СДЕЛОК
 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
               {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
               }
           }else
               {
                 if(LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                     return(0); // exit
                  }
                }
     }
        
     
 }
 

}

Voici la version de KONDOR

if(LoCurent<LoPrevious)
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     if(total<1)
     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()!=111) 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+TakeProfit*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-TakeProfit*pp;}
  int res=OrderSend(Symbol(),op,Lot,open_price,1,Bid-StopLoss*Point,Bid+TakeProfit*Point,NULL,mn,0,col); 

   return(res);               
 }
 

L'EA ouvre toujours des transactions à chaque changement de prix lorsque la condition d'ouverture de l'ordre est satisfaite.

Un autre problème est celui des ordres de clôture sur un signal inverse (couvrir un ordre d'achat alors qu'il y a un signal de vente et vice versa).

 
frxmax:

L'EA ouvre toujours des transactions à chaque changement de prix lorsque la condition d'ouverture de l'ordre est satisfaite.

Un autre problème est celui des ordres de clôture sur un signal inverse (couvrir un ordre d'achat alors qu'il y a un signal de vente et vice versa).

Voici une autre façon de procéder. Rédiger un cahier des charges (comme le demandent Sergeev et Composter). Et ensuite obtenir un code qui fonctionne. En fait, il existe une solution à tous les problèmes. Et plus d'une fois, elle a été postée sur ce forum.
 

Bonjour à tous. J'ai entendu parler du forex mais je ne suis pas entré dans les détails, je connais les bases de la programmation C.

Je veux apprendre à programmer des robots forex qui génèrent des revenus.

Je peux vraiment gagner de l'argent avec ça ? Quel est le prérequis minimum pour se lancer ? Que dois-je apprendre ?

 
Vinin:

Il y a une autre façon de procéder. Rédiger les TdR (comme Sergeev et Composter le demandent). Et ensuite obtenir un code qui fonctionne. En fait, il existe une solution à tous les problèmes. Et plus d'une fois exposé sur le forum.
Le cahier des charges de la mission, si j'ai bien compris ?
 
frxmax:

1. Le conseiller ouvre toujours des transactions à chaque changement de prix lorsque la condition d'ouverture d'un ordre est remplie.

2. Un autre problème est celui des ordres de clôture sur un signal inverse (couvrir un ordre d'achat alors qu'il y a un signal de vente et vice versa).

Prérequis :

1. S'il y a une condition pour ouvrir un ordre (Achat) ; S'il n'y a pas d'ordre ouvert (Achat), ouvrir un ordre d'Achat. De même pour Sell

2. S'il y a une condition pour ouvrir un ordre d'achat, s'il y a un ordre de vente ouvert - fermer la vente.

On obtient donc :

1. S'il y a un signal pour ouvrir un ordre d'achat ->>.

2. S'il y a un ordre de vente ouvert ->>.
2.1 Fermez-la.

S'il n'y a pas d'ordre d'achat ouvert ->> 3.
3.1 Ouvrez-le.

De même pour Sell

Raison: