Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 78

 
Si prega di rispondere in ordine di priorità. Ho un indicatore visualizzato da un grafico a barre. Quando si unisce o dopo essersi ricollegato mostra un valore di op-penny. Ho impostato la condizione al primo avvio per resettare la 0a cella dell'array. E l'ho impostato inite - non ha aiutato. L'ho resettato all'avvio - ok. (Ho messo la condizione all'inizio: if(GetLastError()==6)zas[0]=0.0; - non aiuta.
 
dikson1976-1:
Si prega di rispondere in ordine di priorità. Ho un indicatore visualizzato da un grafico a barre. Quando si unisce o dopo essersi ricollegato mostra un valore di op-penny. Ho impostato la condizione al primo avvio per resettare la 0a cella dell'array. E l'ho impostato inite - non ha aiutato. L'ho resettato all'avvio - ok. (Ho messo la condizione all'inizio: if(GetLastError()==6)zas[0]=0.0; - non aiuta.

Non posso fare a meno del codice.
 

Dozol:



Prova a passare attraverso gli ordini in ordine inverso.

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
Me ne sono occupato da solo. Prendetevela comoda. Grazie a tutti.
 
Dozol:

Amici, aiutatemi. Ho bisogno di chiudere tutti gli ordini su una coppia di valute selezionata. Ecco cosa ho scritto (parte del codice EA):

int Zakrit_vse() ...

Usa SRC per incollare il codice sul forum

Lo incollo qui, forse troverete qualcosa di interessante per voi stessi:

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

Amici, aiutatemi. Ho bisogno di chiudere tutti gli ordini su una coppia di valute selezionata. Ecco quello che ho scritto (parte del codice EA):


Perché reinventare la ruota quando tutto è già stato inventato prima di te. Per esempio. Non dimenticare questo.
 

Aiuto! Ho del codice per un indicatore di canale esterno (quando il limite superiore del canale viene raggiunto, il trade si apre per vendere - si chiude quando il limite inferiore viene raggiunto, per comprare in ordine inverso). Per ragioni sconosciute, non apre le transazioni, non riesco a trovare l'errore. Funziona perfettamente con un altro indicatore di canale. Vorrei specificare subito che tutti i buffer sono impostati.

Il codice è allegato.

extern double Lots = 0.1;
extern string Comment = "TMA Canal2";
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int Slippage = 2; // slippage
extern int Magic = 124;

extern string Indi = "Dati dell'indicatore";
extern string TimeFrame = "time framecorrente;
extern int TMAPeriod = 56;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern intTRPeriod = 100;
extern double TrendThreshold = 0.5;
extern bool ShowCenterLine = false;

doppio PriceHigh, PriceLow, SL, TP;
biglietto int;

//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // per un broker a cinque cifre
{
TakeProfit *= 10;
StopLoss *= 10;
Scivolamento *= 10;
}
ritorno(0);
}

//+------------------------------------------------------------------+
//| Calcolare le posizioni aperte
//+------------------------------------------------------------------+
int CalcolaOrdiniCorrenti(simbolo stringa)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
se(OrderType()==OP_BUY) compra++;
se(OrderType()==OP_SELL) vende++;
}
}
//---- volume degli ordini di ritorno
if(buys>0) return(buys);
else return(-sells);
}

//+------------------------------------------------------------------+
//controllare le condizioni di ordine aperto
//+------------------------------------------------------------------+
void CheckForOpen()
{
doppio PriceHigh, PriceLow;
biglietto int;
//---- andare a fare trading solo per i primi tic della nuova barra
se(Volume[0]>1) ritorno;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);


if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "TMA Canal2",124,0,Red);
ritorno;
}
//---- condizioni di acquisto
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "TMA Canal2",124,0,Blue);
ritorno;
}
//----
}
//+------------------------------------------------------------------+
//| Controlla le condizioni di chiusura dell'ordine
//+------------------------------------------------------------------+
void CheckForClose()
{
doppio PriceHigh, PriceLow;
//---- go trading solo per i primi tik del nuovo bar
se(Volume[0]>1) ritorno;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
pausa;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}

//+------------------------------------------------------------------+
//| Iniziare la funzione |
//+------------------------------------------------------------------+
void start()
{
//---- controllare la storia e il commercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

Sono nuovo di mql4, so come lavorare con SL e TP, ma ho un problema quando ho bisogno di chiudere gli ordini tramite il segnale del contatore dell'indicatore. Non capisco bene come funziona la funzione OrderSelect(). So che per cercare un ordine si usa un ciclo, è nel codice, ma nel processo di trading si scopre che l'ordine ha appena aperto e immediatamente chiuso, perché le condizioni di apertura di un acquisto coincide con le condizioni di chiusura di una vendita e come spiegare che questo non dovrebbe fare non capisco.

Il pulsante SRC serve per incollare il codice!

Come l'avete scritto, fate anche delle aggiunte usando la Documentazione!

Se avete copiato, contattate l'autore per le revisioni o per lavorare!

 


Aggiungo un'altra volta. Quante volte ti ho detto che per inserire il codice, usa il pulsante sulla riga superiore

Ed è auspicabile attenersi agli stili di scrittura del codice.... Desiderabile, ma non essenziale. Ma la maggior parte delle persone è più propensa a rispondere con un codice facile da capire.

 

Sono nuovo di mql4, so come lavorare con SL e TP, ma ho un problema quando ho bisogno di chiudere gli ordini da un segnale di indicatore inverso. non ho idea di come funziona la funzione OrderSelect(). So che il ciclo viene utilizzato per cercare gli ordini, è nel codice, ma nel processo di negoziazione si scopre che l'ordine ha appena aperto e immediatamente chiuso, perché le condizioni per l'apertura di un acquisto coincidono con le condizioni di chiusura della vendita e come spiegare che questo non dovrebbe fare non capisco, si prega di spiegare.

borilunad grazie per il suggerimento, rifatto, poi si può anche cancellare quel messaggio con la citazione per non ingombrare.

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
Motivazione: