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

 
Top2n:

Mi dispiace, è un peccato ripetere la stessa cosa cento volte.

È quasi un mese che fisso come una pecora il cancello. Non capisco niente.

Il compito è quello di calcolare una media mobile minore con una media mobile di 13,

cioè calcolare un periodo di 12 sulla base di 13.

Facile da calcolare: Y(N)=1/N*(Y(N+1)*(N+1)-X[N]), dove Y(i) - valore di MA(i) sulla barra zero, X[j] - valore del prezzo sulla barra j-esima; solo che questa è un'assurdità computazionale, mentre non permette comunque di guardare nel futuro.
 

Salve, uno degli stimati guru vorrebbe controllare l'avvio del mio primo EA? È possibile andare avanti? Forse mi sono perso qualcosa? Sarei molto grato per qualsiasi specifica. Ho visto da qualche parte nel forum come rendere aperta una sola posizione, ma non l'ho copiato e ora non riesco a trovarlo. Aiuto, per favore.

Grazie!

// Versione di prova di Expert Advisor

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

//------Вводные данные:-----------------------------------------------------------

input double Lots = 0.1; //Lot

input int MovingPeriod =5; // periodo di calcolo МА

input int MovingShift =0; // spostamento MA

input int InpBandsPeriod=10; // periodo delle Bande di Bollinger

input int InpBandsShift=0; // spostamento delle bande di Bollinger

input double InpBandsDeviations=2.0; // deviazione delle Bande di Bollinger

input int K_Period=30; // %K periodo dello stocastico

input int D_Period=10; // %D periodo stocastico

input int Slowdawn =8; // rallentamento stocastico

colore di input clMainStoch =Yellow; // colore della linea stocastica principale

colore di ingresso clSignalStoch =Red; // colore della linea del segnale stocastico

// -----Dichiarare le variabili globali:------------------------------------------

double MA_0, MA_1, MA_2; // valore MA su 0, 1 e 2 barre

double MB_0, MB_1, MB_2; // Valore della media di Bollinger su 0, 1 e 2 barre

double ExtUpperBuffer[]; // valore della linea di Bollinger superiore

double ExtLowerBuffer[]; // Valore della linea di Bollinger inferiore

doppio Delta_0, Delta_1; // differenza tra i valori di Bollinger superiore e inferiore ...

// ...linee di Bollinger su 0 e 1 barre

double Yellow_0, Yellow_1, Yellow_2; // valore MAIN su 0, 1 e 2 barre

double Red_0, Red_1, Red_2; // valore SIGNAL su 0, 1 e 2 barre

//-------Поехали!----------------------------------------------------------------

int start() //funzione speciale start

{

/chiamata di funzione dell'indicatore MA

MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);

MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);

//feedback alla funzione Bande di Bollinger

MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0);

MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1);

MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2);

Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]);

Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]);

//Chiama funzione stocastica

Giallo_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0);

Giallo_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1);

Giallo_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2);

Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0);

Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);

Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2);

//-------Ситуации по Стохастику:-----------------------------------------------------

//Il mercato è ipercomprato

double MOB()=(Yellow_0>=80 && Red_0>=80); //Variabile locale

//Il mercato è ipervenduto.

double MOS()=(Yellow_0<=20 && Red_0<=20); //Variabile locale

/Il mercato è normale.

double MN()=(20<Yellow_0<80 && 20<Red_0<80); //Variabile locale

//situazione critica

double MC1()=(20<Yellow_0<80 && Red_0<=20); //Variabile locale

double MC2()=(20<Yellow_0<80 && Red_0>=80); //Variabile locale

double MC3()=(20<Red_0<80 && Yellow_0<=20); //Variabile locale

double MC4()=(20<Red_0<80 && Yellow_0>=80); //Variabile locale

//-------Example(my)order to open position-----------------------------------------------------


if (Delta_0 > Delta_1 && MOB()==true) //Il mercato è ipercomprato ma il delta si sta espandendo

{ se (MB_2 > MB_1 && MB_1 < MB_0) //Rottura di Bollinger inferiore

OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point); //aprire ordine di acquisto

Alert("GetLastError()); //Messaggio di un errore

Alert("Posizione aperta BAY con lotti("Lots"),prezzo("Ask")."); //Messaggio di acquisto

 

Inoltre, le posizioni BAY (così come Sell) possono essere aperte in condizioni diverse, e a seconda delle condizioni in cui la posizione è stata aperta (ad esempio BAY), ci saranno diverse condizioni di chiusura. (per esempio BAY), ci saranno diverse condizioni di chiusura.

Come posso tradurre questo in MKL?

 
rapid_minus:

Inoltre, le posizioni BAY (così come Sell) possono essere aperte in condizioni diverse, e a seconda delle condizioni in cui la posizione è stata aperta (ad esempio BAY), ci saranno diverse condizioni di chiusura. (per esempio BAY), ci saranno diverse condizioni di chiusura.

Come posso tradurre questo in MKL?

Selezioniamo l'ordine nel ciclo. Se è un Buy, e gli altri dati (simbolo, magik, ecc.) soddisfano il criterio che dovrebbe essere chiuso a "condizioni di chiusura personalizzate", allora lo chiuderemo se esistono "condizioni di chiusura personalizzate".
 
artmedia70:
Selezioniamo l'ordine nel ciclo. Se è un Buy e tutti gli altri dati (simbolo, mago, qualsiasi cosa) soddisfano il criterio di doverlo chiudere a "condizioni di chiusura adeguate", allora lo chiudiamo se ci sono "condizioni di chiusura adeguate".

Per me è un po' vago, ma dopo qualche ricerca credo che capirò. La ringrazio molto per non essersi allontanato o aver fatto la morale dalle vette della conoscenza, come alcuni compagni del paese sovietico.

Ho capito come chiudere:

//-------Esempio (mio) di un ordine di apertura di una posizione con chiusura vincolante (per biglietto)-----------------------------------------------------

//Variabile locale che apre un ordine BAY (invece della linea 63)

int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))

//-------Quindi la chiusura per questo particolare ordine potrebbe essere la seguente:-----------------------------------------------------

if (Ticket_1()==true) //se l'ordine #1 è stato aperto, allora...

{ se (Giallo_0>Rosso_0 && (Giallo_0-Rosso_0)<(Giallo_1-Rosso_1)) //il giallo è superiore al rosso, contrazione(condizione)

{ if (MA_2 < MA_1 && MA_1 > MA_0);} //Rosso sopra quello centrale (condizione)

else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Yellow above red, expansion(condition)

{ if (MB_2 < MB_1 && MB_1 > MB_0);} //Rottura superiore di Bollinger (condizione)

bool Ans=OrderClose(Ticket,Lot,Bid,0); //...chiudere l'ordine (bloccovariabile)

Alert("Tentativo di chiudere l'ordine con Bid("Lots"),prezzo("Ask"). In attesa di risposta...");

if (Ans==true) // Ha funzionato :)

{

Alert ("Chiudi ordine BAY per lotto("Lotti"),Prezzo di chiusura("Offerta");

break; // Esci dal ciclo di chiusura della posizione

}


}

Si prega di dare un'analisi, bene anche sul post precedente. Scusa se sono testardo, ma vedi - sei l'unico che risponde... Grazie!

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия (по тикету)----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ(вместо строки 63)
   int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (Ticket_1()==true)                              //Если был открыт ордер №1, то...
     { if (Yellow_0>Red_0 && (Yellow_0-Red_0)<(Yellow_1-Red_1)) //Желтая выше красной, сужение(условие)
        { if (MA_2 < MA_1 && MA_1 > MA_0);}                      //Верхний перелом Средней (условие)
       else (Yellow_0>Red_0 && (Yellow_0-Red_0)>(Yellow_1-Red_1)) //Желтая выше красной, расширение(альтерн.условие)
         { if (MB_2 < MB_1 && MB_1 > MB_0);}                      //Верхний перелом Боллинджера (условие)
       
       bool Ans=OrderClose(Ticket,Lot,Bid,0);          //...закрытие ордера (лок.переменная)                                               
   Alert("Попытка закрыть ордер БАЙ лотом("Lots"),цена("Ask"). Ожидание ответа..");
   if (Ans==true)                                     // Получилось :)
        {
         Alert ("Закрыт ордер БАЙ лотом("Lots"),цена закрытия("Bid");
         break;                                       // Выход из цикла закрытия позиции
        }

     }
È molto più facile da leggere. Mi dispiace.
 
rapid_minus:

Per me è un po' vago, ma dopo aver scavato un po' credo che capirò. La ringrazio molto per non essersi allontanato o aver fatto la morale dalle vette della conoscenza, come alcuni compagni del paese sovietico.

Ho pensato di chiuderla in questo modo:

...

Si prega di dare un'analisi, e anche sul post precedente. Scusa l'insistenza, ma vedi, sei l'unico che risponde... Grazie!

Beh, è un po' nebuloso, no?

1. dovete determinare il fatto che si verifica la condizione per chiudere l'ordine

2. Nel ciclo, si esaminano tutte le posizioni aperte e, quando si trova l'ordine di acquisto richiesto, lo si chiude.

Questo è un esempio di ciclo:

void ClosePositions(string symbol, int type, int magic) {
   for(int i=OrdersTotal()-1; i>=0; i--) {      // цикл по открытым ордерам
      if(OrderSelect(i,SELECT_BY_POS)) {        // выбираем ордер по индексу
         if(OrderMagicNumber()!=magic) continue;// если магик не искомый - ищем дальше
         if(OrderSymbol()!=symbol)     continue;// если символ не тот - ищем дальше
         if(OrderType()!=type)         continue;// если тип ордера не тот - ищем дальше
         // здесь, если ордер выбран, то он соответствует нужным критериям,
         // вызов функции закрытия выбранного ордера по тикету
         }
      }   
   }

Cioè, per chiudere l'ordine Buy sul simbolo corrente (sul grafico in cui l'Expert Advisor è in esecuzione) e con un numero magico di 100500 (per esempio), si dovrebbe chiamare la funzione in questo modo

ClosePositions(Symbol(),OP_BUY,100500);

Non dovete scrivere il numero 100500, di solito il numero magico è già impostato nell'EA in una variabile, per esempio int Magic = 100500; Allora dovete scrivere Magic invece di 100500

Non ho scritto nulla nel ciclo in cui la posizione selezionata dovrebbe essere chiusa, poiché dovrebbe chiamare la funzione per chiudere l'ordine secondo il biglietto. Questo è di solito una chiamata di una funzione completa con codici di ritorno del server commerciale gestiti. Potete scrivere lì un semplice comando per chiudere l'ordine selezionato OrderClose() per controllare;

 
rapid_minus:
È molto più facile da leggere in questo modo. Mi dispiace.

È anche possibile modificare un vecchio post, per non creare duplicati ;)

 
evillive:
È ancora possibile modificare un vecchio post per evitare duplicati ;)
Ci ho provato, ma l'SRC non lo mette più.
 
artmedia70:

C'è un po' di nebbia.

1) Determinare il fatto che si è verificata la condizione per chiudere l'ordine di acquisto

2. Nel ciclo, si esaminano tutte le posizioni aperte e, quando si trova l'ordine di acquisto richiesto, lo si chiude.

Questo è un esempio di ciclo:

Cioè, per chiudere l'ordine Buy sul simbolo corrente (sul grafico in cui l'Expert Advisor è in esecuzione) e con un numero magico di 100500 (per esempio), si dovrebbe chiamare la funzione in questo modo

Non dovete scrivere il numero 100500, di solito il numero magico è già impostato nell'EA in una variabile, per esempio int Magic = 100500; Allora dovete scrivere Magic invece di 100500

Non ho scritto nulla nel ciclo in cui la posizione selezionata dovrebbe essere chiusa, poiché dovrebbe chiamare la funzione per chiudere l'ordine secondo il biglietto. Questo è di solito una chiamata di una funzione completa con codici di ritorno del server commerciale gestiti. Potete scrivere lì un semplice comando per chiudere l'ordine selezionato OrderClose() per controllare;


Grazie. Ma per quanto ho capito il magik viene assegnato automaticamente quando si apre un ordine. Quindi non posso determinare a quali condizioni l'ordine è aperto e quindi non so a quali condizioni dovrebbe essere chiuso.