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

 
Ciao, potresti dirmi come insegnare al mio Expert Advisor a rilevare i frattali?
 
skyjet:
Ciao, puoi dirmi come insegnare al mio Expert Advisor a rilevare i frattali?

Vorrei sapere più dettagli. Ci sono molti indici diversi che possono disegnare e trovare frattali. L'Expert Advisor non ha bisogno di rilevarli. Si prende l'indicatore e si copiano i valori di un certo frattale dai suoi buffer. Niente di complicato se ci si presta attenzione.
 

Buona giornata! Ragazzi, consigliatemi su questo problema: nello Strategy Tester, l'exp apre gli ordini secondo l'algoritmo e lo schema di aumentare la dimensione del canale delle medie successive - potete vederlo nell'immagine - ogni media successiva viene aperta ad una distanza maggiore dalla precedente (come in Ilan). Ma allo stesso tempo, la stampante produce tali valori di espressioni, che la media non dovrebbe avere luogo, perché le condizioni per la loro apertura non sono soddisfatte 25 più di 2856, 2197, 1690. Come fa a entrare in questa condizione e ad aprire posizioni? Ho deciso di circondare tutto con delle bretelle, ma non aiuta.

Un test sui prezzi di apertura. Ecco il codice e l'immagine:

...
// Внешние переменные (оптимизируются)
extern string A1 = " Параметры ММ ";
extern double Lots = 0.02;         // Стартовый лот

//-------------------                                  
extern double LotExponent = 2.7;  // на сколько умножать стартовый лот в степени - схема по Илану                                   

extern string A2 = " В настоящих пипсах ";
extern int StopLossPips_BUY = 100;   // уровень стартового усреднения в бай  объёма позиции в пипсах 


// Увеличение шага усреднений по схеме

extern double PipStepExponent_BUY  = 1.3; // на сколько умножать стартовый шаг в степени 

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

.....

// если стартовая открыта и достигнут уровень усреднения, то усреднить на  Lots * MathPow(LotExponent,NumberOfPositions(Symbol(), -1, MN_L));  
    if (NumberOfPositions(Symbol(), -1, MN_L)>=1 && 
       GetProfitOpenPosInCurrency(Symbol(), -1, MN_L)<0)   
      // if (MathAbs (GetProfitOpenPosInPoint(Symbol(), -1, MN_L)) > StopLossPips)  
          {
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                     {WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                      Print (" первое усреднение ");
                     }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                          NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                       Print (" последующие, если это больше ", NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                              " этого, то открыть бай ", NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0));
                     }
                    }
                 }   
                     
              
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_SELL) 
               if ((PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))<0)
               
                  if (NumberOfPositions(Symbol(), -1, MN_L)==1)
                     {
                      if (NormalizeDouble((MathAbs(PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))/Point),0)>StopLossPips_SELL)           
                      WmOrderSend(Symbol(), OP_SELL,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_SELL,MN_L))),Bid, 0, TP_START_SELL, " усреднение вниз ", MN_L);         
                     }
                     
          }           
.....

 
skyjet:
Ciao, puoi dirmi come insegnare all'Expert Advisor a rilevare i frattali?

Vedere navigatore. Se si tratta di questo, è così.
 
Roman.:

Buona giornata! Ragazzi, consigliatemi su questo problema: nello Strategy Tester, l'exp apre gli ordini secondo l'algoritmo e lo schema di aumentare la dimensione del canale delle medie successive - potete vederlo nell'immagine - ogni media successiva viene aperta ad una distanza maggiore dalla precedente (come in Ilan). Ma allo stesso tempo, la stampante produce tali valori di espressioni, che la media non dovrebbe avere luogo, perché le condizioni per la loro apertura non sono soddisfatte - 25 non è più di 2856, 2197, 1690. Come fa a entrare in questa condizione e ad aprire posizioni? Ho deciso di circondare tutto con delle bretelle, ma non aiuta.

Un test sui prezzi di apertura. Ecco il codice e l'immagine:


Per come la vedo io, senza vedere tutto il codice e imparare come funziona qui, è improbabile che qualcuno ve lo dica. Tutte le funzioni utilizzate in questo blocco sono note solo a voi. È meglio stampare tutto man mano che si procede e tenere d'occhio l'uscita dei messaggi.
 
hoz:

Per come la vedo io, senza vedere tutto il codice e imparare come funziona qui, non credo che qualcuno possa dirvelo. Tutte le funzioni utilizzate in questo blocco sono note solo a voi. È meglio stampare tutto man mano che si procede e tenere d'occhio l'output del messaggio.

Tutte le funzioni funzionano correttamente - queste sono funzioni di Kim I.V. "Solo funzioni utili da Kim I.V." Dal nome delle funzioni - il loro scopo è chiaro.
 

L'ho capito - tutto funziona correttamente. Avrebbe dovuto essere stampato PRIMA di aprire la posizione.

 if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                        {
                         Print (" первое усреднение ",NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                                " StopLossPips_BUY = ",StopLossPips_BUY, " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits), "P = ", DoubleToStr(Point,Digits));                 
                         WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                        }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if (NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                         NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                        Print (" последующие, если это больше ", DoubleToStr(NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),Digits),
                              " этого, то открыть бай ", DoubleToStr(NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0),Digits),
                              " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits));
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                                           }
                    }
                 }   
           

La posizione di mediazione è stata aperta secondo l'algoritmo e la funzione PriceOpenLastPos(Symbol(), OP_BUY, MN_L) ha restituito il valore della posizione appena aperta, ecco perché avevo delle domande.

Grazie, hoz.

 

Roman, sono contento che abbia funzionato per te :) E anche così veloce.

In pratica, il mio compilatore ha ricominciato a bestemmiare. C'è una libreria che usa una classe al suo interno. La classe del corso è inclusa nella biblioteca:

#include <HOZ_Code\Classes\CLogging.mqh>

CLogging logging;

Quando si compila questa libreria, che usa la classe CLogging.mqh, il compilatore giura così:

'#property' - name expected     CLogging.mqh    6       1

Nella classe su questa linea:

Cosa può significare tutto questo?

 
Come fa lo script ad abilitare/disabilitare la visualizzazione dei livelli di trading?
 

Aiuto!!!

In un EA del forum pubblico ho attaccato un modello a 3 barre a una condizione di entrata commerciale.

Dopo l'ottimizzazione e i test (3,5 anni) ho installato dieci finestre su un conto demo con impostazioni individuali in ognuna, che hanno fornito la velocità del gufo tratta almeno 1,5 al giorno. La stessa velocità è assicurata su 10 computer virtuali sul mio server - una finestra in ciascuno.

È passata una settimana ma non è stato fatto un solo accordo da nessuna parte.

Cosa fare?

=========================

int GetSignal()
{
double LevelADX = iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0);
double Delta_01_ADX =(iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0)
- iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,2));
double mas,maf;
mas=iMA(NULL,TF_MA,Slow.periodo,0,Slow.metod,Slow.price,1);
maf=iMA(NULL,TF_MA,Fast.period,0,Fast.metod,Fast.prezzo,1);
//------------------
double delta1,delta2;

delta1=NormalizzareDouble((Close[1]-Close[2])/Point,5);
delta2=NormalizzareDouble((Close[2]-Close[3])/Point,5);

double body3=NormalizzareDouble((Open[3]-Close[3])/Point,5)
//------------------
int STsig=-1;
if(CrossLevel && Lines>0) {
int up,dw;
int up_l,dw_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][0]<LevelDw) dw++; else{
if(ST[jj][0]>LevelUp) up++;
}
if(ST[jj][1]<LevelDw) dw_l++; else{
if(ST[jj][1]>LevelUp) up_l++;
}
}
if(up<=8-Lines && up_l>8-Lines) STsig=1;
if(dw<=8-Lines && dw_l>8-Lines) STsig=0;
}
if(STsig==-1 && BreakSweep) {
double big,small;
double big_l,small_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][1]>big_l) big_l=ST[jj][1];
if(ST[jj][1]<small_l || small_l==0) small_l=ST[jj][1];
}
if(big_l-small_l<=Sweep && (small_l>=LevelUp || big_l<=LevelDw)) {
for(jj=0;jj<8;jj++) {
if(ST[jj][0]>big) big=ST[jj][0];
if(ST[jj][0]<small || small==0) small=ST[jj][0];
}
se(grande-piccolo>Sweep)

{

//--------------- i miei add-on Volume [] e Open [] e Close [] ------------------------------

if(Close[1]>Close[2]&& Close[2]>Close[3]&& Close[3]<Open[3] && Close[2]>High[3]
&& body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && big_l<=LevelDw && maf>mas)
STsig=0;

if(Close[1]<Close[2]&& Close[2]<Close[3]&& Close[3]>Open[3] && Close[2]<Low[3]
&& body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && small_l>=LevelUp && maf<mas)
STsig=1;
}

}

}

se(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==0) return(OP_BUY);

se(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==1) return(OP_SELL);
return(-1);

}

=================================================

Grazie in anticipo!

Motivazione: