[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 357

 
Zhunko:
Ti dispiacerebbe postare il codice? Forse uno pseudo codice. In che senso senza inizio...? È una funzione di base, come main() in C++.

Dipende da quali compiti avete intenzione di risolvere e determinare la posizione del vostro codice nel corpo del programma EA. Nessuno ci obbliga a mantenere il codice nella funzione start()!

La funzione start() è una delle tre predefinite nel nostro modello di codice. Dovrebbe essere presente almeno!, perché il programma padre - il programma terminale (questo è main(), il principale), eseguendo i suoi compiti principali, ricevendo una citazione fresca dal server (più o meno) basta guardare nella vostra funzione start ed eseguire il codice, che è in esso, se sarà solo return(), allora la funzione start si fermerà qui.

 
"Professionisti, non passate oltre", :) per favore condividete un link alla vostra risorsa di notizie preferita (preferibilmente in lingua russa), dove viene pubblicato il calendario economico e altre cose utili. Se tali link non possono essere postati qui, allora mandatemeli per PM.
 
aiutatemi a scrivere questo.

se c'è un segnale di acquisto
controllare gli ordini di vendita aperti
se c'è, chiudere
se non c'è, aprire l'acquisto

se c'è un segnale di vendita
controllare gli ordini di acquisto aperti
se c'è, chiudere
se non c'è, aprire l'acquisto
 
frxmax:
aiutare a scrivere quanto segue.

se c'è un segnale di acquisto
Controlla gli ordini di vendita aperti
se sì, chiudere
se non c'è un segnale di acquisto

se c'è un segnale di vendita
Controlla gli ordini di acquisto aperti
se sì, chiudiamo
se nessun segnale, riaprire l'acquisto


Inizia a scrivere da solo - noi ti aiuteremo

Ecco un punto di partenza per aiutarvi https://book.mql4.com/ru/

 
abolk:


Inizia a scrivere da solo - ti aiuteremo

Ecco a voi https://book.mql4.com/ru/

Ho già "iniziato".

total=OrdersTotal();
se(CONDIZIONE di aprire un ordine di acquisto)
se(totale<1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+100*Point, "Buy",1111,0,Green);
se(biglietto<0)
{
Print("OrderSend failed with error #",GetLastError());
ritorno(0);
}
}else
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL)
OrderClose(NULL,Lot,Ask,3);
ritorno(0);
}
}

 
Quasi giusto, basta controllare prima e poi impostare.
 
frxmax:
aiutare a scrivere quanto segue.

se c'è un segnale di acquisto
Controlla gli ordini di vendita aperti
se sì, chiudere
Se non c'è nessun segnale possiamo aprire un ordine di acquisto
//  в ф-ции старт 
  
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:

Ti ringrazio molto per il tuo aiuto, ma ho fatto le cose un po' diversamente e il tuo approccio non mi è chiaro.

Potresti spiegarmi come vendere tutto questo? Ci sono molte cose che non capisco.

Sei stato molto utile.

 
frxmax:

Ho provato a capovolgere tutto per vendere - senza successo. nessuna compravendita aperta

Errore 130. - Le fermate non sono giuste, quindi dove le abbiamo?

Ora apre un ordine per ogni barra, ma ne ho bisogno solo di uno.


total=OrdersTotal();

se(totale<1)

ecc.

 
KONDOR:


Hmm, sono andato più a fondo nel gioco - offerte e richieste di cambiamento ecc... grazie per questo)

Ho sistemato anche gli stop.

Motivazione: