[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 284

 
hoz:
Das spielt keine Rolle. Ich gebe einen absoluten Wert zurück, modulo durch MathAbs...


Wenn Sie nach einem Eingabepunkt suchen,führtMathAbs() einen Fleck ein. Für mich sollte es von Anfang bis Ende angegeben werden, damit klar ist, wann und mit welcher Toleranz!
 
borilunad:

Wenn Sie einen Eingabepunkt suchen,macht MathAbs() ihn verschmiert. Für mich sollte es von Anfang bis Ende angegeben werden, damit klar ist, wann und mit welcher Toleranz!


Korrigiert... Keine der Bedingungen ist ohnehin erfüllt.

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA(int index, int maPeriod)
{
   return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound(int crossDir[], bool& returnSign[])
{
   for (int i = 0; i < 4; i++)
   {
      if (crossDir[i] == CROSS_NO)
         continue;

      returnSign[i] = false;
      double ema = GetMA(1, g_maPeriod[i]);

 //     VrPr (ND(MathAbs(ema - Ask)));
   //   VrPr (i_thresholdFromMa * pt);
      if (crossDir[i] == CROSS_UP)
      {
         if (ND(Ask - ema) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
         //   VrPr (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt);
            returnSign[i] = true;
            VrPr (" returnSign["+0+"]"+" = "+ returnSign[0]);
            VrPr (" returnSign["+1+"]"+" = "+ returnSign[1]);
            VrPr (" returnSign["+2+"]"+" = "+ returnSign[2]);
            VrPr (" returnSign["+3+"]"+" = "+ returnSign[3]);
         }
      }
      if (crossDir[i] == CROSS_DN)
      {
         if (ND(ema - Bid) <= i_thresholdFromMa * pt) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            VrPr (" returnSign["+0+"]"+" = "+ returnSign[0]);
            VrPr (" returnSign["+1+"]"+" = "+ returnSign[1]);
            VrPr (" returnSign["+2+"]"+" = "+ returnSign[2]);
            VrPr (" returnSign["+3+"]"+" = "+ returnSign[3]);
         }
      }
   }
}

bevorreturnSign[i] = true; und folglich bevor die FunktionVrPr (die Funktion, die die Daten ausgibt, die ich überwache) nicht verwendet wird. Allerdings hat der Abstieg bereits begonnen. Hier ist ein Screenshot, Sie können sehen, dass das ArraycrossDir[] gefüllt wird, wenn jede schnelle Maschine die langsame überquert...

Beachten Sie, dass 2 Räder das dickste Rad überquert haben, und dass 2 Elementen des Arrays bereits der Wert 1 zugewiesen wurde, d. h. ihr Wert istCROSS_DN

Das bedeutet, dass die Bedingung

 if (crossDir[i] == CROSS_DN)

und dann...

 
borilunad:

Wenn Sie einen Einstiegspunkt suchen,führt MathAbs() zu Unschärfen. Ich denke, es sollte von Anfang bis Ende angegeben werden, so dass klar ist, wann und mit welcher Toleranz!

Auch mit wem und warum.
 
tara:

Wer noch und warum.

Außer visuell ist es einfacher, ohne MathAbc() aus Gewohnheit wahrzunehmen, aber... es gibt keinen Unterschied. Aber wir sind vom Thema abgewichen. Gibt es irgendwelche Anmerkungen zu meinem Code? Die Frage ist ja immer noch offen...
 
Ich habe keine Vorbehalte gegen den Kodex.
 
Warum ist die Bedingung dann nicht erfüllt? Gibt es einen Kommentar zu dieser Logik?
 

Nein.

 
Ja. Morgen früh wird es besser sein, hoffentlich klärt sich morgen etwas auf.
 

Guten Tag zusammen!

Ich teste USD/JPY im MT-4 von Alpari.

Ich habe die USD/JPY 1-Minuten-Historie heruntergeladen

Hinweis: Nach dem Laden im Archiv der Zitate der Minutenhistorie auf "1 Minute" doppelklicken.

Die Liste der einminütigen Zitate wird aus irgendeinem Grund nicht im Fenster "Zitatarchiv" der Datenbank angezeigt.


1 Stunde TF.

Alle Zecken

Zeitraum 01.01.2000. - 01.01.2013.

Am Ende des Tests wird auf der Registerkarte REPORTS ein roter Balken angezeigt, der besagt, dass die Simulationsqualität 25% beträgt.

Ich habe denselben Zeitraum mit denselben Parametern ...... getestet, jedoch für jeden Monat einzeln .

und für jeden Monat wird ein grüner Balken und 90 % Simulationsqualität angezeigt.

Dann habe ich denselben Zeitraum getestet, ihn aber in zwei gleiche Teile aufgeteilt: 2000-2006 und 2006-2013.

Für jedes Teil ist der Balken grün und die Qualität der Simulation beträgt 90 %.


QUESTION

Was sollte ich tun, damit die Qualität der Prüfungen über einen Zeitraum von 13 Jahren im Allgemeinen auch 90 % beträgt?

Dankeschön

 

Richtig. Ich glaube, ich bin fertig. Hier ist der neu gestaltete Zeckensammler, der die Zecken in die zweite Kerze packt.

Das war es:

int start()
  {  
//----
if(flag == true)
  {
  if(tick.time.local == true)
    {
    time = TimeLocal();
    }
    else{
    time = TimeCurrent();
    }
  if(t < time)
    { 
         t = time; 
    }
    else{ 
         t ++;
    }   

  if(FileSeek(hand1e, fpos, SEEK_SET) == false)
           { 
           error = GetLastError();
           Print("out: error(",error,"): ",ErrorDescription(error));
           flag = false;
           return;
           }
           else{
           bid = MarketInfo(symbol, MODE_BID);
           ask = MarketInfo(symbol, MODE_ASK);
           
                FileWriteInteger(hand1e,    t,   LONG_VALUE);            
                FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);          
                FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);            
                FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);    
                FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);                            
                FileWriteDouble (hand1e, time, DOUBLE_VALUE);                   
      FileFlush       (hand1e);  

      fpos = FileTell (hand1e);

Wurde:

int i;//аналогично i=0
        while((TimeCurrent()-time)>1){//то заносим старые значения столько раз, сколько было пропущено секунд минус один
                if(FileSeek(hand1e, fpos, SEEK_SET) == false){//перемещаем указатель на новую позицию, которую мы запомнили в FileTell
                                error = GetLastError();//если ошибка
                                Print("out: error(",error,"): ",ErrorDescription(error));//записываем её в лог
                                flag = false;
                                return;//и выходим
                        }else{//выдумываем несуществующую свечу (т.к. тика в эту секунду не было)
                                time++;
                                FileWriteInteger(hand1e,  time,   LONG_VALUE);//TimeCurrent()
//выбор выдуманной свечи (секунда, при которой тика не было):
//прочерк на Close[]
/*
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Open[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//High[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Low[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                                FileWriteDouble (hand1e,  0, DOUBLE_VALUE);//Volume[]
*/
//свеча без теней
/*
                                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//Open[]
                                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//High[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Low[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                                FileWriteDouble (hand1e,  last.index+1, DOUBLE_VALUE);//Volume[]
*/
//такая же свеча, как и была (не прочерк и не без теней)
                                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//Open[]
                                FileWriteDouble (hand1e,  bid[ArrayMaximum(bid)], DOUBLE_VALUE);//High[]
                                FileWriteDouble (hand1e,  ask[ArrayMinimum(ask)], DOUBLE_VALUE);//Low[]
                                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                                FileWriteDouble (hand1e,  last.index+1, DOUBLE_VALUE);//Volume[]
//конец выбора
                                FileFlush       (hand1e);
                                fpos = FileTell (hand1e);//запоминаем позицию записи в файле
                }
        }
ArrayResize(bid, 1);//урезаем и обнуляем использованные нмассивы
ArrayResize(ask, 1);
if(flag==true){
        if(tick.time.local==true){//если флаг работы с историей поднят
                        time = TimeLocal();//работаем с локальным временем
                        while(time==TimeLocal()){//пока секунда не прошла
                                bid[i]=MarketInfo(symbol, MODE_BID);//заносим в индикаторный массив данные тиков
                                ask[i]=MarketInfo(symbol, MODE_ASK);
                                i++;
                        }
                }else{//иначе
                        time = TimeCurrent();//работаем с временем сервера
                        while(time==TimeCurrent()){//пока секунда не прошла
                                bid[i]=MarketInfo(symbol, MODE_BID);//заносим в индикаторный массив данные тиков
                                ask[i]=MarketInfo(symbol, MODE_ASK);
                                i++;
                        }                       
        }
}
//Вышли из цикла, т.к. время изменилось. Заносим в файл:
if(FileSeek(hand1e, fpos, SEEK_SET) == false){//перемещаем указатель на новую позицию, которую мы запомнили в FileTell
                error = GetLastError();//если ошибка
                Print("out: error(",error,"): ",ErrorDescription(error));//записываем её в лог
                flag = false;
                return;//и выходим
        }else{
                int last.index=ArraySize(ask)-1;
                FileWriteInteger(hand1e,  time,   LONG_VALUE);//TimeCurrent()
                FileWriteDouble (hand1e,  bid[0], DOUBLE_VALUE);//Open[]
                FileWriteDouble (hand1e,  bid[ArrayMaximum(bid)], DOUBLE_VALUE);//High[]
                FileWriteDouble (hand1e,  ask[ArrayMinimum(ask)], DOUBLE_VALUE);//Low[]
                FileWriteDouble (hand1e,  ask[last.index], DOUBLE_VALUE);//Close[]
                FileWriteDouble (hand1e,  last.index+1, DOUBLE_VALUE);//Volume[]
                FileFlush       (hand1e);
                fpos = FileTell (hand1e);//запоминаем позицию записи в файле
}

Kommentare zum Code.

1. Um CPU-Zeit zu sparen, wurde in der virtuellen Candlestick-Auswahl kein Groß-/Kleinbuchstabenwechsel vorgenommen, stattdessen wurden die Abschnitte mit der Auswahl auskommentiert (da die Auswahl für bestimmte Zwecke einmal vor der Kompilierung durchgeführt wird).

2. Bei der Arbeit mit der Ortszeit (also offline) nicht in den Sinn gekommen. In der"while(time==TimeLocal()){///bis eine Sekunde vergangen ist"-Schleife vermute ich, dass esMarketInfo in FileWriteDouble geben muss (klingt für mich wie die Spitze eines Idioten). Wenn Sie mir sagen, was dort logischer aussehen würde, wäre ich Ihnen dankbar.

3. Das Konstrukt eines Autors

if(flag == true)
  {
  if(tick.time.local == true)
    {
    time = TimeLocal();
    }
    else{
    time = TimeCurrent();
    }

Ich habe sie ganz am Ende von init() deklariert.

4. Zu Beginn von init() dynamische Arrays

   IndicatorBuffers(2);
   SetIndexBuffer(0, bid);
   SetIndexBuffer(1, ask);

anstelle der verwendeten Variablen.

5. Zur Optimierung können Sie theoretisch WinAPI-Dateifunktionen verwenden und in einem Block von 44 Byte (Länge der MarketInfo-Struktur oder was auch immer sie in .hst ist) auf einmal in die Historie schreiben.

6. Die Modellierung der Zeit für das Schreiben in die Zelle Time[] durch den Autor wurde vollständig entfernt. Aus demselben Grund wird in der Kopf-/Während-Schleife nicht auf TimeLocal(), sondern nur auf TimeCurrent() geprüft.

7. Was schlagen Sie sonst noch zur Optimierung des Codes vor?