[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 67

 

Salve a tutti.

Ho deciso di diventare uno scrittore. Volevo scrivere qualcosa in MQL4. Ho letto qualcosa al riguardo e ho deciso di scrivere un Expert Advisor, che avrebbe aperto la posizione quando RSI con periodo 8 incrocia 70 e chiuso la posizione quando incrocia 30 e nient'altro sarebbe successo. L'ho scritto io, ecco il codice

//+------------------------------------------------------------------+
//| 4doc.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#proprietà copyright "Alex"
#proprietà link "http://www.metaquotes.net"

//---- parametri di ingresso
extern int PerRSI=8;
extern int intNamber=77771;

extern double Lots=1.0;

/+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
biglietto,
totale;
doppio
rsi_0, //valore. rsi_0 corrente
rsi_1; // Valore. rsi_1 1a barra
se (Bars<100)
{
Stampa("barre inferiori a 100");
ritorno(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra corrente
rsi_1=iRSI(NULL,0, PerRSI,0,1); // barra corrente più 1
total=OrdersTotal();
se(totale<1)
if(rsi_0 < rsi_1 && rsi_0 > 70) // Se la linea ha attraversato 70
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Stampa("Ordine SELL aperto: ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
for(cnt=0;cnt<totale;cnt++)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // questa è una posizione aperta? OP_BUY o OP_SELL
OrderSymbol()==Symbol()) // lo strumento corrisponde?
{
if(OrderType()==OP_SELL) // la posizione è aperta
{
if(rsi_0 > rsi_1 && rsi_0 < 30) // Se la linea ha attraversato 30
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // chiudere la posizione
return(0); // uscire

}}}}}

L'ho testato e funziona per lo più come volevo. Ho deciso di cambiare il codice, per aprire una posizione quando SSI - 14 attraversa il livello 100, e per chiudere una posizione quando attraversa il livello 100. Ho cambiato il codice RSI per CCI , eccolo.

//+------------------------------------------------------------------+
//| CCI-DOC.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#proprietà copyright "Alex"
#proprietà link "http://www.metaquotes.net"

//---- parametri di ingresso
extern int PerCCI=14;
extern inttern MagicNamber=88881;

extern double Lots=1.0;

//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
biglietto,
totale;
doppio
cci_0, // valore cci_0. cci_0 corrente
cci_1; // valore cci_1. cci_1 1a barra
se (Bars<100)
{
Stampa("barre inferiori a 100");
ritorno(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // Barra corrente
cci_1=iRSI(NULL,0, PerCCI,0,1); // barra attuale più 1
total=OrdersTotal();
se(totale<1)
if(cci_0 < cci_1 && cci_0 > 100) // se(la linea ha attraversato 100
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Stampa("Ordine SELL aperto: ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
for(cnt=0;cnt<totale;cnt++)
{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // questa è una posizione aperta? OP_BUY o OP_SELL
OrderSymbol()==Symbol()) // lo strumento corrisponde?
{
if(OrderType()==OP_SELL) // la posizione è aperta
{
if(cci_0 > cci_1 && cci_0 < -100) // se la linea ha attraversato -100
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // chiudere la posizione
return(0); // uscire
}}}}}

Iniziato a testare CCI bene, non succede niente, non vende o compra, nessun errore nel log, alla fine del test si apre il grafico della curva, ma non è CCI, ma RSI 70-30 con periodo 14..... Forse uno degli scrittori esperti capirà e dirà perché e come risolvere il problema.

 
pepsi писал(а) >>
Poi la demo nel registro mostra tutto più chiaramente. È più chiaro dove cercare l'errore. Da solo...

>> grazie

 

Ciao di nuovo!!!!!!!

Vorrei /non-intrusivamente/;-)) ricordarvi la vostra domanda su p. 64 sulle condizioni di trading per il MA... grazie in anticipo (per un calcio nei pantaloni per un dummie)

 

Signori, potete dirmi se utilizzo diversi grafici temporali dello stesso strumento di trading nel terminale?

Come viene consumato il traffico dal programma? Consuma il traffico del periodo minimo o il traffico di tutti i periodi?

 
igrok2008 >> :

Ciao di nuovo!!!!!!!

Vorrei /non-intrusivamente/;-)) ricordarvi la vostra domanda su p. 64 sulle condizioni di trading per il MA... grazie in anticipo (per il calcio nei pantaloni ai manichini)

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т. е. объяснить программе
    к виду каких данных эти опены относятся( целые, дробные, строчные, логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if( MA_1< Open[1] && MA_0>Open[0])
     if( CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if( MA_1>Open[1] && MA_0<Open[0])
     if( CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >> :

Grazie per la risposta!!!

1. Lasciami chiarire, le due linee con doppio open_0 e doppio_1 devono essere scritte PRIMA delle linee di doppio MA, o è un acritico ??????...

2. Nelle condizioni di trading potete sostituire open[0,1] con open_0,1 ????????.....

 
igrok2008 >> :

Grazie per la risposta!!!

1. Lasciami chiarire, le due linee con doppio open_0 e doppio_1 devono essere scritte PRIMA delle linee di doppio MA, o è un acritico ??????...

2. Potete sostituire open[0,1] con open_0,1 ????????.....

1. non critico.

2. può

 

Aiuto per favore... Forse sono pigro, ma non riesco a capire come collegare il programma per fare trading su un conto demo o reale... Per favore, spiega cosa scrivere e dove cantare, ti prego... grazie in anticipo!))

 
Ho scritto - ho scritto, ho fatto trading nel tester, ma sulla demo o reale non vuole fare transazioni, e in generale non ci sono segnali, anche se dovrebbero esserci(((
 
keekkenen >> :

1. non critico

2. può

CGFCB<J cioè GRAZIE!!!!