Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 573

 
Hallo, können Sie mir sagen, wie ich meinem Expert Advisor beibringen kann, Fraktale zu erkennen?
 
skyjet:
Hallo! Können Sie mir sagen, wie ich meinem Expert Advisor beibringen kann, Fraktale zu erkennen?

Ich würde gerne mehr Details erfahren. Es gibt viele verschiedene Indizes, die Fraktale zeichnen und finden können. Der Expert Advisor braucht sie nicht zu erkennen. Sie nehmen den Indikator und kopieren die Werte eines bestimmten Fraktals aus seinen Puffern. Nichts Kompliziertes, wenn man darauf achtet.
 

Guten Tag! Leute, gebt mir einen Rat zu diesem Thema: Im Strategy Tester öffnet der Exp Orders nach dem Algorithmus und dem Schema der Vergrößerung des Kanals der nachfolgenden Durchschnitte - man kann es im Bild sehen - jeder nachfolgende Durchschnitt wird in einem größeren Abstand vom vorherigen geöffnet (wie bei Ilan). Aber gleichzeitig produziert der Drucker solche Werte von Ausdrücken, dass die Mittelwertbildung nicht stattfinden sollte, weil die Bedingungen für ihre Öffnung nicht erfüllt sind 25 mehr als 2856, 2197, 1690. Wie kommt es zu diesem Zustand und wie werden überhaupt Positionen eröffnet? Ich habe beschlossen, alles mit Klammern zu umschließen, aber das hilft nicht.

Ein Test der Eröffnungspreise. Hier ist der Code und das Bild:

...
// Внешние переменные (оптимизируются)
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:
Hallo, können Sie mir sagen, wie ich dem Expert Advisor beibringen kann, Fraktale zu erkennen?

Siehe Navigator. Wenn es darum geht, dann ist es so.
 
Roman.:

Guten Tag! Leute, gebt mir einen Rat zu diesem Thema: Im Strategy Tester öffnet der Exp Orders nach dem Algorithmus und dem Schema der Vergrößerung des Kanals der nachfolgenden Durchschnitte - man kann es im Bild sehen - jeder nachfolgende Durchschnitt wird in einem größeren Abstand vom vorherigen geöffnet (wie bei Ilan). Aber gleichzeitig produziert der Drucker solche Werte von Ausdrücken, dass die Mittelwertbildung nicht stattfinden sollte, weil die Bedingungen für ihre Öffnung nicht erfüllt sind - 25 ist nicht mehr als 2856, 2197, 1690. Wie kommt es zu diesem Zustand und wie werden überhaupt Positionen eröffnet? Ich habe beschlossen, alles mit Klammern zu umschließen, aber das hilft nicht.

Ein Test der Eröffnungspreise. Hier ist der Code und das Bild:


So wie ich es verstehe, ist es unwahrscheinlich, dass man Ihnen das sagen kann, ohne den gesamten Code zu sehen und zu erfahren, wie er hier funktioniert. Alle in diesem Block verwendeten Funktionen sind nur Ihnen bekannt. Am besten ist es, alles nach und nach auszudrucken und die Ausgabe der Meldungen im Auge zu behalten.
 
hoz:

Soweit ich weiß, kann Ihnen das niemand sagen, ohne den gesamten Code zu sehen und zu erfahren, wie er hier funktioniert. Alle in diesem Block verwendeten Funktionen sind nur Ihnen bekannt. Am besten drucken Sie alles nach und nach aus und beobachten die Ausgabe der Meldungen.

Alle Funktionen funktionieren ordnungsgemäß - es sind Funktionen von Kim I.V. "Nur nützliche Funktionen von Kim I.V." Aus dem Namen der Funktionen - ihr Zweck ist klar.
 

Ich habe es herausgefunden - alles funktioniert einwandfrei. Sie hätte gedruckt werden müssen, BEVOR die Position eröffnet wurde.

 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);          
                                           }
                    }
                 }   
           

Die Mittelwertposition wurde gemäß dem Algorithmus geöffnet und die Funktion PriceOpenLastPos(Symbol(), OP_BUY, MN_L) gab den Wert der gerade geöffneten Position zurück, deshalb hatte ich Fragen.

Vielen Dank, hoz.

 

Roman, schön, dass es bei dir geklappt hat :) Und außerdem so schnell.

Im Grunde genommen hat mein Compiler wieder angefangen zu fluchen. Es gibt eine Bibliothek, die eine Klasse in ihr verwendet. Die Klasse wird natürlich in die Bibliothek aufgenommen:

#include <HOZ_Code\Classes\CLogging.mqh>

CLogging logging;

Beim Kompilieren dieser Bibliothek, die die Klasse CLogging.mqh verwendet, flucht der Compiler wie folgt:

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

In der Klasse auf dieser Linie:

Was kann das alles bedeuten?

 
Wie aktiviert/deaktiviert das Skript die Anzeige der Handelsstufen?
 

Hilfe!!!

In einem EA aus dem öffentlichen Forum habe ich ein 3-Balken-Muster an eine Handelseinstiegsbedingung angehängt.

Nach Optimierung und Tests (3,5 Jahre) habe ich zehn Fenster auf einem Demokonto mit individuellen Einstellungen in jedem installiert, die die Geschwindigkeit der Eule mindestens 1,5 Geschäfte pro Tag zur Verfügung gestellt. Die gleiche Geschwindigkeit ist auf 10 virtuellen Computern auf meinem Server gewährleistet - ein Fenster in jedem.

Eine Woche ist vergangen, ohne dass ein einziger Deal zustande gekommen wäre.

Was ist zu tun?

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

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.period,0,Slow.metod,Slow.price,1);
maf=iMA(NULL,TF_MA,Fast.period,0,Fast.metod,Fast.Preis,1);
//------------------
double delta1,delta2;

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

double body3=NormalizeDouble((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];
}
if(groß-klein>Sweep)

{

//--------------- meine Add-ons Volume [] und Open [] und 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;
}

}

}

if(Volumen[0]<2 && Volumen[1]>Volumen1 && Volumen[2]>Volumen2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==0) return(OP_BUY);

if(Volumen[0]<2 && Volumen[1]>Volumen1 && Volumen[2]>Volumen2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==1) return(OP_SELL);
return(-1)

}

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

Vielen Dank im Voraus!