[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 1121

 

Guten Tag/Nacht

Ich versuche, einen Handel mit dieser primitiven Methode umzukehren, was nicht funktioniert (die Berechnung im Expert Advisor basiert auf Ticks):

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // ermittelt, ob es Kaufaufträge gab && ob eine Kerze unterhalb des unteren Levels geschlossen hat

{

CheckForClose(); // Schließen des Auftrags

OpenSell(); // einen Verkaufsauftrag eröffnen

Rückkehr;

}

Bitte teilen Sie mir mit, was ich falsch mache? Ich wäre auch dankbar für Links, die es mir ermöglichen würden, diese Lücke zu schließen.

 

dzhini:

Ich versuche, den Handel auf diese primitive Weise umzukehren, was nicht funktioniert (der Expert Advisor berechnet nach Ticks):

if(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // es wird geprüft, ob es Kaufaufträge gab && ob eine Kerze unterhalb des unteren Niveaus geschlossen hat


In dieser Funktion zählen Sie wahrscheinlich alle Aufträge.
 

Wie kann ich feststellen, wie viele Minuten zwischen Zeit1 und Zeit2 liegen?

datetime Time_1     = D'2011.01.12 13:30';
datetime Time_2     = D'2011.01.05 10:30'; 

минут = Time_1- Time_2
 
sergeev:
Dies ist wahrscheinlich die Funktion, mit der Sie alle Aufträge zählen. Dies sollte für Buy
sein.

Dies ist eine Standardfunktion:

int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) kauft++;
if(OrderType()==OP_SELL) sells++;
}
}

if(Käufe>0) return(Käufe);
sonst return(-sells);

}

wenn >0 dann ist es ein Kaufauftrag, wenn <0 dann ist es ein Verkaufsauftrag ))))

 
Eliza:

Wie kann ich feststellen, wie viele Minuten zwischen Zeit1 und Zeit2 liegen?

die Differenz ergibt die Anzahl der Sekunden.

Dividieren Sie durch 60. Sie erhalten die Anzahl der Minuten.

 
Stornieren Sie die Transaktion. Die Struktur des Expert Advisors wurde geändert - die Funktionen wurden entfernt. Wie man es unter bestimmten Bedingungen auf einer Kerze schließen und öffnen kann.

extern double TP = 70; //Gewinn nehmen
extern double SL = 0; //Verlust stoppen
extern double Lot = 0.1;

double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;


//+------------------------------------------------------------------+
//| Experteninitialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}

//+------------------------------------------------------------------+
//| Expertenfunktion |
//+------------------------------------------------------------------+

void start()
{

if(Bars<100 && IsTradeAllowed()==false) return;


if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

if(resBuy==0 && resSell==0 && CheckBreak()==-1& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}

if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- interessiert sich für diesen Teil: Schließen und Öffnen auf einem Balken
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=OrderSend(Symbol(),OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- interessiert sich für diesen Teil: Schließen und Öffnen auf einem Bar
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}

}

//----------------------------------------------------------------- Check Low&High break (Func)

double CheckBreak()
{
double candle=Open[1]-Close[1];

if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
 
sergeev:

Differenz gibt die Anzahl der Sekunden zurück.

Dividieren Sie durch 60. Das ergibt die Anzahl der Minuten.

Ich erhalte nur das Datum 1971.03.04 12:00, vielleicht muss das umgerechnet werden?

extern datetime Time_1     = D'2011.01.12 13:30'; 
extern datetime Time_2     = D'2011.01.05 10:30'; 

bool   Commentari      = true;

int start()
  {

if (Commentari){
 Comment(
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/60)," минут",
      
         "\n==============================");}
   return(0);
  }
 
Eliza:

Ich bekomme nur das Datum, vielleicht muss es umgerechnet werden?

Zunächst einmal: Warum multiplizieren Sie mit 60?

Zweitens - wenn Sie die Anzahl der Minuten als Zeit wie 00:15 anzeigen möchten,
müssen Sie nicht durch 60 dividieren oder multiplizieren.

 
sergeev:

Zunächst einmal: Warum multiplizieren Sie mit 60?

Zweitens - wenn Sie die Anzahl der Minuten auf dem Bildschirm als eine Zeit wie 00:15 darstellen möchten,
müssen Sie nicht durch 60 dividieren oder multiplizieren.

Ja, ich habe die Division korrigiert, aber die Jahreszahl lautet 1970.01.01 02:51

Ich brauche es nicht für den Bildschirm, ich wollte nur die Anzahl der Minuten ohne Datum für dieses Zeitintervall finden....

Auch ohne Division wird das Datum ausgegeben, oder muss ich das Datum, auf dem die Funktion basiert, abziehen?

  • datetime ist ein Datum und eine Uhrzeit, eine ganze Zahl ohne Vorzeichen, die die Anzahl der seit 0 Uhr des 1. Januar 1970 verstrichenen Sekunden enthält.
  • extern datetime Time_1     = D'2011.01.12 13:30'; 
    extern datetime Time_2     = D'2011.01.05 10:30'; 
    
    datetime me_2     = D'1970.01.01 00:00'; 
    
    bool   Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment(
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2))," минут",
          
             "\n==============================");}
       return(0);
      }

  • Wenn ich das Datum 1970.01.01 02:51 subtrahieren es wirft, dass ungültige Zeit, ich brauche nur die Anzahl der Minuten, um von diesem Zeitintervall zu erhalten, wenn seine zum Beispiel 25000 Minuten in diesem Intervall brauche ich diese Zahl 25000 ... etwas wie das(
  • oder ist es nicht möglich, dies über die Sprache μl zu erhalten?
 

Wenn Sie nur eine Anzahl von Minuten benötigen, gibt es keinen Grund, TimeToStr zu verwenden.

Zeit ist eine normale int-Zahl.

Alternativ können Sie TimeToStr nur mit dem TIME_MINUTE-Flag verwenden