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

 

Guten Abend. Ich habe versucht, es auf dem Bild zu zeigen, damit es klar ist. Angenommen, ich habe "Dodge", wenn der Preis der nächsten Bar ist höher als die maximale "Dodge" - ich kaufen, T / P, sagen wir 15 Punkte, und der Preis auf der gleichen Bar und geht nach oben und Ordnung (Buy_2) mit T / P von 15 Punkten öffnet sich wieder, und ich brauche nichtdiese 2-nd Eröffnung (Buy_2) auf der 1. Wie lässt sich dieses Missverständnis ausräumen?

 
iMAG:

Liebe Fachleute und Wissende!

Ich bin ratlos - der BB-Indikator gibt Signale, die ich nicht verstehe (nicht "Rot-Grün-Rot"!). Um genauer zu sein, habe ich einen solchen Anruf getätigt:

bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boln = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup;)
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);

Das Ergebnis ist, dass alle 3 Variablen denselben Wert ergeben. >8-O

Paar EUR, TF - H1. Irgendwelche Ideen???

Vielen Dank im Voraus...

Würden Sie auch die Abweichung auf negativ setzen?
 
Fantar:

Zur Verdeutlichung habe ich versucht, ein Bild davon zu zeichnen:

Versuchen Sie nun, dasselbe auf mq4 zu tun. Hier ist eine Zweigstelle für Fragen, wenn etwas unklar ist. Es gibt den Arbeitsdienst für die Erstellung von EAs von Grund auf
 
iMAG:

Liebe Fachleute und Wissende!

Ich bin ratlos - der BB-Indikator gibt mir unverständliche Signale (nicht "Rot-Grün-Rot"!). Um genauer zu sein, rufe ich wie folgt an:

bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);

Das Ergebnis ist, dass alle 3 Variablen denselben Wert ergeben. >8-O

Es handelt sich um EUR, H1. Irgendwelche Ideen?

Vielen Dank im Voraus...

Die Abweichung von der von Ihnen eingestellten Hauptlinie ist 0 (Null). Sie sollte größer als Null sein.
 

Die Essenz der Strategie: Einstieg durch stochastisches Signal (5,14,3), Ausstieg ebenfalls durch stochastisches Signal, aber mit einer anderen Periode (5,3,3). Ich verstehe nicht, wie man einen Ausstieg durch die Stochastik und nicht durch ein umgekehrtes Signal vornehmen kann.
Ich habe ein Problem und ich habe keine Ahnung, wie es gelöst werden kann, ich werde versuchen, zu erklären.
Also, in dem Code, den ich gepostet habe, gibt es 2 Funktionen
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
In void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) müssen wir eine Bedingung setzen, die entscheidet, ob wir die Bestellung verlassen oder schließen sollen...
Ich habe versucht, Bedingungen zu stellen, aber nichts funktioniert....
Kann jemand nachsehen, ob es einen Fehler in diesen Funktionen gibt oder ob ich es vermasselt habe....
Dateien:
 
Können Sie mir sagen, ob ich bei zwei aufeinanderfolgenden OrderSend-Befehlen, die Aufträge setzen, die Funktion IsTradeAllowed dazwischen platzieren muss?

oder ist es nicht notwendig und der EA wird vom ersten OrderSend-Aufruf zum zweiten nur nach einer erfolgreich platzierten Bestellung übergehen?

Wenn IsTradeAllowed weiterhin erforderlich ist, welche Zeitverzögerung sollte in der while-Schleife eingestellt werden?
 
Desead:
Können Sie mir sagen, ob ich bei zwei aufeinanderfolgenden OrderSend-Befehlen zum Setzen von Aufträgen die Funktion IsTradeAllowed dazwischen platzieren muss?

oder ist es nicht notwendig und der EA geht vom ersten OrderSend-Aufruf zum zweiten erst nach einer erfolgreich platzierten Bestellung über?

In der Testversion ist das nicht nötig, aber auf dem Demo- oder Echtgeldkonto erhalten Sie eine Meldung über einen besetzten Handelsfaden.

Desead:


Wenn IsTradeAllowed noch benötigt wird, welche Zeitverzögerung sollte in der while-Schleife eingestellt werden?
Hängt von der Ausführungsgeschwindigkeit ab, die bei verschiedenen Servern unterschiedlich ist. Denken Sie daran, auch eine Schleifenprüfung für IsStopped() hinzuzufügen, sonst haben Sie kein Glück.
 
Hallo, könnten Sie mir bitte sagen, wo ich das Archiv mit den detaillierten Kursen (Tick oder Minute) herunterladen kann? Die Daten, die in das Archiv von Zitaten in MT4 (nicht viel) Minute Daten nur für 5 Tage des Tests ist.
 

Guten Tag. Das System bietet drei Einstiegspunkte für KAUFEN und VERKAUFEN. Wenn jedoch ein Signal eintrifft, werden die Positionen bei jedem Tick geöffnet, solange das Signal besteht. Es liegt ein Fehler bei den Flaggen vor. Bitte helfen Sie mir, es zu verstehen.

   static bool buy_h=true, buy_l=true, buy_50=true,
               sell_h=true, sell_l=true, sell_50=true;

 if(LSMA_Sig==0) // up-trend
    {
      if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг
       }
      //---
      if(Stoch_Sig==0 && buy_50==true)
       {
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_50=false;        
       }
      //---
      if(Stoch_Sig==2 && buy_h==true)
       {
         sl=Ask-Stop_Loss*Point;       
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_h=false;         
       }   
    }
   if(LSMA_Sig==1) // dn-trend
    {
      if(Stoch_Sig==3 && sell_h==true)
       {
         sl=Bid+Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_h=false;
       }
     //---
     if(Stoch_Sig==1 && sell_50==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_50=false;         
      }
     //---
     if(Stoch_Sig==5 && sell_l==true)
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
            Alert("Неудачная попытка открыть ордер SELL. Ошибка: ", GetLastError());
         if(Ans==true)
            sell_l=false;        
      }
    }
    
   if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг
       buy_l=true;
   if(Stoch_Sig!=0 && buy_50==false)
       buy_50=true;
   if(Stoch_Sig!=2 && buy_h==false)
       buy_h=true;
   if(Stoch_Sig!=3 && sell_h==false)
       sell_h=true;
   if(Stoch_Sig!=1 && sell_50==false)
       sell_50=true;
   if(Stoch_Sig!=5 && sell_l==false)
       sell_l=true;  
 
silhouette:

Guten Tag. Das System bietet drei Einstiegspunkte für KAUFEN und VERKAUFEN. Wenn jedoch ein Signal eingeht, werden die Positionen bei jedem Tick geöffnet, solange das Signal besteht. Es liegt ein Fehler bei den Flaggen vor. Bitte helfen Sie mir, es zu verstehen.

OrdersTotal() gibt die Anzahl der bereits geöffneten Positionen an, d.h. wir können damit überprüfen, ob bereits eine Position geöffnet ist oder nicht.

Grund der Beschwerde: