[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 132

 
Roman.:

IMHO nicht kompliziert, aber sehr einfach zu "leiten" oder zu senden,

Nun, es ist sicherlich einfacher, zu "senden", d.h. zu "senden", als etwas vorzuschlagen. Und in der Tat, ich habe nichts gefragt, um mich in einem Lehrbuch zu stoßen. Er hat zwar an einer Stelle ein Duplikat geschrieben, aber das Wesentliche hat sich nicht geändert.

artmedia70:

Sagen Sie mir endlich genau, was Sie tun wollen... Zum Beispiel: der MAA so-und-so steigt und liegt über dem MAA so-und-so und der Preis ist an einem bestimmten Punkt unter/über dem MAA so-und-so und wenn es wahr ist, dann platzieren Sie eine Pending Order in einiger Entfernung. Ich werde Ihnen einen groben Algorithmus geben. Denn es ist schwierig, Sie in die richtige Richtung zu lenken, wenn Ihre Codefragmente aus dem Zusammenhang gerissen sind. Immerhin ist die Aufgabe für die fünfte Klasse (überspitzt)



Hier füge ich eine Testversion des Codes an und veröffentliche sie ebenfalls in meinem Beitrag.

//+-----------------------------------------------------------------------------------+
//|                                                                       test_Ma.mq4 |
//|                                                                               hoz |
//|                                                                                   |
//+-----------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string ___H0 = " ___________ Параметры МА ____________ ";
extern int i_TF = 0,
           i_fastMaPeriod = 10,
           i_slowMaPeriod = 21;
extern string ___H1 = " _____ Параметры ордера _______";
extern int i_magic = 3333021;
extern double i_thresholdFromMa = 5;                           // Отступ от МА
// Машечки
double fastMa,
       slowMa;
double pt;
// Переменные рыночного окружения
double g_spread,
       g_stopLevel,
       g_tickSize;
// Идентификаторы положений машек
#define MA_DIRECT_TO_UP      0                                 // Машки направлены вверх
#define MA_DIRECT_TO_DOWN    1                                 // Машки направлены вниз
#define MA_DIRECT_TO_NONE   -1                                 // Машки во флете
#define SIGNAL_BUY           0                                 // Сигнал на покупку
#define SIGNAL_SELL          1                                 // Сигнал на продажу
#define SIGNAL_NO           -1                                 // Сигнала нет

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{
   GetMarketInfo();
   
   if (Digits  == 2 || Digits == 4)
       pt = Point;
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
   if (Digits == 6)
       pt = Point * 100;
   if (Digits == 7)
       pt = Point * 1000;
   

  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  g_spread = MarketInfo(Symbol(),MODE_SPREAD);
  g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
  g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}
//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa + i_thresholdFromMa * pt) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником

       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
   if (ticket > 0)
 
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa - i_thresholdFromMa * pt) < Bid)           // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником
   
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0)
    
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем относительное положение машек                                              |
//+-------------------------------------------------------------------------------------+
int GetStateMa(double fastMa, double slowMa)
{
   if (fastMa > slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_UP);                 // ..машки направлены вниз
   
   if (fastMa < slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_DOWN);               // машки направлены вверх
   
   return (MA_DIRECT_TO_NONE);                   // Машки не имеют выраженного направления
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal)
{
   if (signal == SIGNAL_BUY)                     // Если сигнал на покупку..
       if (!OpenBuy(fastMa, slowMa))             // ..покупаем
          return(false);
   
   if (signal == SIGNAL_SELL)                   // Если сигнал на продажу..
       if (!OpenSell(fastMa, slowMa))           // ..продаём
          return(false);
       
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP)       // Если машки указывают вверх..
       if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
           return(SIGNAL_BUY);                       // ..функция возвращает сигнал покупки

   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN)      // Если машки указывают вниз..
       if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
       return(SIGNAL_SELL);                          // ..функция возвращает сигнал продажи
   
   return (SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);

// Отслеживание открытия нового бара
   static datetime lastBarTime = 0;    // Время проведения последних рассчётов
   
   if (lastBarTime == iTime(NULL, 0, 0))         // На текущем баре все необходимые действия..
       return (0);                      // ..уже были выполнены

// Рассчёт сигнала   
   int signal = GetSignal();
   
// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);
   
   lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
                                       // .. успешно выполнены
  return (0);
}

Die Bedingungen besagen eindeutig, dass der Preis des Auftrags über (unter) dem MA+(-) Offset vom MA liegt.

Hier ist sie:

if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt )

Das Signal sollte nur berechnet werden, wenn sich der Kurs im"Gap"-Bereich des MA +(-)-Einzugs befindet.

Zum Beispiel in einer Kauffunktion:

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);

Buy muss umi_thresholdFromMa * pt überfastMa liegen.

In Wirklichkeit ist sie nicht vorhanden. Entweder ist es ein Fehler in der Sprache oder es ist ein Fehler im Winken. Wie kann ich sonst erklären, was ich brauche? Ich habe den gesamten Code ohne zusätzliche Bedingungen und Funktionen angegeben (nur ein Signal nackt und öffnend).

Es ist bereits deutlich geschrieben(für einen Tester, ich habe es nicht wirklich überprüft!)

So wird sie geöffnet:

Falscher Ort für die Eröffnung...

artmedia70:


In Bezug aufdie hervorgehoben: Arbeit auf offene Preise, dann wird es keine MAs Neuzeichnung auf der Null-Bar

Ich habe extra eine Bedingung für den 1. Takt aufgestellt, damit es keine Verwirrung gibt. Die Hauptsache ist, wie man es betreibt...
Dateien:
test_ma.mq4  8 kb
 
Das Startkennzeichen z.B. für die vierten fünf Minuten jeder Stunde muss im Indikator definiert werden.
if( Minute()==15)
Es fehlt an nichts. Schieben Sie sie in die richtige Richtung.
 

Ich habe eine Frage: Wenn ich bei der Formulierung meiner Handelskriterien einen gleitenden Durchschnitt mit einem Shift nach rechts verwende, d.h. der Shift-Wert ist positiv.

Dann sollte ich bei der Bildung des Signals nicht den Wert des gleitenden Durchschnitts am Nullpunkt oder am ersten Balken verwenden, sondern an dem Balken mit dem Index, der dem Wert der Verschiebung entspricht.

 
Operr:
Das Startkennzeichen z.B. für die vierten fünf Minuten jeder Stunde muss im Indikator definiert werden.


if( Minute()==15)// так будет работать в течении 1 минуты (от 15 до 16)
if( Minute()>=15)// так от 15 минут и до конца текущего часа
 
Tincup:

Ich habe eine Frage - wenn ich bei der Formulierung meiner Handelskriterien einen gleitenden Durchschnitt mit einer Verschiebung nach rechts verwende - d.h. der Verschiebungswert ist positiv.

Dann sollte ich bei der Bildung des Signals nicht den Wert des gleitenden Durchschnitts am Nullpunkt oder am ersten Balken verwenden, sondern an dem Balken mit dem Index, der dem Wert der Verschiebung entspricht.


Legen Sie den gleitenden Durchschnitt auf das Diagramm und sehen Sie, welchen Index Sie benötigen. Sie können es visuell sehen.
 
hoz:

Zweifellos ist es einfacher, zu "senden", d.h. zu "senden", als etwas vorzuschlagen. Ich habe auch nicht darum gebeten, mir ein Lehrbuch in die Hand zu drücken. Ich habe an einer Stelle eine Abschrift davon geschrieben, aber das Wesentliche ändert sich nicht.

Hier füge ich die Testcode-Variante bei und veröffentliche sie auch in meinem Beitrag.

Die Bedingungen besagen eindeutig, dass der Preis des Auftrags über (unter) dem MA+(-) Offset vom MA liegt.

Hier ist sie:

Das Signal sollte nur dann berechnet werden, wenn sich der Kurs im"Gap"-Bereich des MA +(-)-Einzugs befindet.

Zum Beispiel in einer Kauffunktion:

Buy muss umi_thresholdFromMa * pt überfastMa liegen.

In Wirklichkeit ist sie nicht vorhanden. Entweder ist es ein Fehler in meiner Sprache oder ein Fehler in meiner Maus. Wie kann ich sonst erklären, was ich brauche? Ich habe einen ganzen Code ohne zusätzliche Bedingungen und Funktionen angegeben (nur ein bloßes Signal und eine Öffnung).

Es ist bereits deutlich geschrieben(für einen Tester, ich habe es nicht wirklich überprüft!)

So wird sie geöffnet:

Ich habe extra eine Bedingung für den 1. Takt aufgestellt, damit es keine Verwirrung gibt. Die Hauptsache ist, wie man es betreibt...
Ich frage noch einmal: Wann genau wollen Sie den Auftrag erteilen? Nicht Ihr Code Antwort (nicht wollen, um es zu verstehen - es gibt genug von ihren eigenen Codes für die Analyse), und nur Worte,

Zum Beispiel: Ich möchte eine Pending Order oberhalb/unterhalb eines MA in einem Abstand von ... platzieren. bah, bah, bah, bah, bah, bah ...

Zum zweiten Mal, bitte erklären Sie mir, ist das so schwer? Wir hätten Ihr Problem schon längst gelöst.

 
Außerdem: Wenn Sie fastMA und slowMA als global definiert haben, warum sollten Sie sie an eine Funktion übergeben? Alle Funktionen können sie ohnehin sehen, ohne ihre Parameter an die aufgerufene Funktion zu übergeben.
 

Guten Tag.

Können Sie mir bitte sagen, wie man mit GAPs in EAs umgeht?

Ich bekomme oft GEPs während des Wochenendes, und nachdem sie auftreten, die Arbeit mit den Aufträgen hängt, wie es zu beheben, ich danke Ihnen so sehr!

 

Artyom, was glauben Sie, wird schneller funktionieren, Ausdruck mit MathMax oder mit if?

double dist = MathMax(MathMax(NormalizeDouble(Dist*Point,Digits),spread),MathMax(StopLevel,FreezeLevel));//это?
// или это?
double dist = NormalizeDouble(Dist*Point,Digits);
if(dist < spread) dist = spread;
if(dist < StopLevel) dist = StopLevel;
if(dist < FreezeLevel) dist = FreezeLevel;


Ich habe es nicht in Worten erklärt, denn es ist klar, dass dieser Ausdruck mir dazu dient, Fehler zu vermeiden 130, und er dient mir perfekt!

Vielen Dank im Voraus!

 
hoz:

Legen Sie den Durchschnitt in das Diagramm ein und sehen Sie, welchen Index Sie benötigen. Sie können es visuell sehen.

Das habe ich. Ich verstehe Ihre Antwort nicht ganz, also frage ich Sie noch einmal. Habe ich Sie richtig verstanden, dass bei der Formulierung der Handelsbedingungen

Sie sollten den MA-Wert für die entsprechende Anzahl von Balken rückwärts verwenden, aber nicht den Wert, der in der Abbildung mit einem gelben Pfeil markiert ist.

Ich habe die Figur so gezeichnet, wie ich Ihre Antwort verstanden habe.