Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 255

 
Mihail Matkovskij #:

Wie berechnen Sie tp?

Ich gebe in der Variablen double tp=50 an;

 
Roman Epifanov #:

Ich gebe in der Variablen double tp=50 an;

double takeProfit;
takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
 
Mihail Matkovskij #:

schreibt nun

2021.12.04 13:56:09.509 TestGenerator: Nicht übereinstimmende Datenfehler (Hochwert 1.13110 am 2021.12.03 23:45 wird vom niedrigsten Zeitrahmen nicht erreicht, Hochpreis 1.13104 stimmt nicht überein)


//+------------------------------------------------------------------+
//|                                                         repa.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   tp = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   double lot=0.01;
   while (i<OrdersTotal())
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней
   if (Close[0]<ema)trend=true ;else if(Close[0]>ema)trend=false; //определили тренд
   
   if (Close[1]<Open[1]) {OrderSend(Symbol(),OP_SELL,lot,Bid,2,Ask+sl,tp,"Candle sell, Close[0]<MA");};
   
   
  }
//+------------------------------------------------------------------+
 
Mihail Matkovskij #:

Setzen Sie es für eine Minute auf... es funktioniert...

aber das Niveau der Haltestelle ist anders -

1 2021.09.16 05:59 sell 1 0.01 1.18190 51.18192 1.18140 0.00 10000.00


 
Roman Epifanov #:

schreibt nun

2021.12.04 13:56:09.509 TestGenerator: Nicht übereinstimmende Datenfehler (Hochwert 1.13110 am 2021.12.03 23:45 wird vom niedrigsten Zeitrahmen nicht erreicht, Hochpreis 1.13104 stimmt nicht überein)


void OnTick()
  {
//---
   int i;
   double lot_sum;
   bool trend;
   double ema;
   double sl=50.0,tp=50.0;
   double stopLoss, takeProfit, openPrice;
   double lot=0.01;
   while (i<OrdersTotal())
   {
     OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
     lot_sum=lot_sum + OrderLots(); // сумма лотов открытых позиций
   
   }
   
   ema=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,0); //взяли значение средней

   if (Close[0]<ema)
     trend=true ;
   else if(Close[0]>ema)
     trend=false; //определили тренд
    
   takeProfit = NormalizeDouble(Bid - tp * Point(), Digits()); // TP для Sell
   stopLoss = NormalizeDouble(Bid + sl * Point(), Digits()); // SL для Sell
   openPrice = NormalizeDouble(Bid, Digits());

   if (Close[1]<Open[1]) {
     OrderSend(Symbol(), OP_SELL, lot, openPrice, 2, stopLoss, takeProfit, "Candle sell, Close[0]<MA");
   }
   
  }

Alle Regeln sind online verfügbar, also überprüfen Sie sie selbst.

 
Mihail Matkovskij #:

Die Regeln sind alle online, also überprüfen Sie sie selbst.

Ich danke Ihnen!

 

Guten Abend meine Herren, könnten Sie mir bitte mitteilen, warum der Berater beim Öffnen der zweiten Bestellung einen Fehler anzeigt?


Der Text des Ratgebers selbst



//+----------------------Параметры-----------------------------------+

input int TakeProfit = 100; // Gewinn in Pips

input int StopLoss = 50; // Verlust in Pips

input double Lot = 0.01; // Startlot

Eingabe double Multilot = 1,95; // Multiplikator für Startlos

input int Schlupf =30; // Schlupf

input int MagicNumber = 333 ; // Eindeutige Nummer


//+------------------------------------------------------------------+

Experten-Initialisierungsfunktion //|.

//+------------------------------------------------------------------+

double tp=0;

double sl=0;

int OnInit()

{

tp=NormalizeDouble(TakeProfit*Point(),Digits());

sl=NormalizeDouble(StopLoss*Point(),Digits());

return(INIT_SUCCEED);

}


//+------------------------------------------------------------------+

//| Experten-Tick-Funktion |

//+------------------------------------------------------------------+

void OnTick()

{

//--die Schleife prüft auf offene Aufträge, wenn der Expert Advisor aktiviert ist, und berechnet diese.

int buy=0; //Anzahl der BUY-Aufträge

int sell=0; //Anzahl der SELL-Aufträge


for(int i = OrdersTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))

if(AuftragsSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(Auftragsart()==OP_BUY)

kaufen++;

if(OrderType()==OP_SELL)

verkaufen++;

}


//--die Schleife erhält die Daten der letzten geschlossenen Order, wenn der EA aktiviert wird

int type=-1; //die Art eines geschlossenen Auftrags

int history_close_orders=0; //Anzahl der abgeschlossenen Aufträge

double lot=0; //Lot des letzten geschlossenen Auftrags

double profit=0; //Gewinn, zu dem der letzte Auftrag geschlossen wurde

datetime time=0; //Schlusszeitpunkt der letzten Bestellung


for(int i = OrdersHistoryTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))

if(AuftragsSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

if(OrderCloseTime()>time)

{

history_close_orders++;

time = OrderCloseTime();//der Zeitpunkt des letzten Auftragsabschlusses

lot= OrderLots();//Lot der letzten geschlossenen Order

type=OrderType();// Typ der letzten abgeschlossenen Bestellung

profit=OrderProfit()*OrderSwap()*OrderCommission();//Gewinn der letzten geschlossenen Order

}

//Berechnen Sie das Los, mit dem der EA arbeiten wird

double Lots_Work=0;// Arbeitslos


if(history_close_orders==0 || profit>0)// wenn keine geschlossenen Aufträge vorhanden sind oder der letzte Auftrag mit Gewinn geschlossen wurde

Lots_Work=Lot;// Das Arbeitslos ist gleich dem Ausgangslos


if(history_close_orders>0 && profit<0) // wenn der letzte Auftrag im roten Bereich geschlossen wurde

Lots_Work=1;// Das Arbeitslos ist gleich dem Los der letzten Bestellung multipliziert mit dem Multiplikator


//eröffnet den ersten Kaufauftrag

if(Kauf==0 || Gewinn>0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrGreen);

if(ticket<0)

Print("OrderSend failed with error #",GetLastError());

sonst

Print("OrderSend erfolgreich abgeschlossen");

}


// Eröffnung des zweiten und der folgenden Kaufaufträge

if(buy==0 && type==OP_BUY && profit<0)

{

int ticket=OrderSend(Symbol(),OP_BUY,Lots_Work,Ask,Slippage,0,0, "EA Test fair",MagicNumber,0,clrGreen);

if(ticket<0)

Print("OrderSend failed with error #",GetLastError());

sonst

Print("OrderSend erfolgreich abgeschlossen");

}


// Eröffnung des ersten Verkaufsauftrags

if(verkaufen==0 || Gewinn>0)

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "EA Test fair",MagicNumber,0,clrRed);

if(ticket<0)

Print("OrderSend failed with error #",GetLastError());

sonst

Print("OrderSend erfolgreich abgeschlossen");

}

// Eröffnung des zweiten und der folgenden Kaufaufträge

if(sell==0 && (type==OP_SELL && profit<0))

{

int ticket=OrderSend(Symbol(),OP_SELL,Lots_Work,Bid,Slippage,0,0, "Expert Advisor Test fair",MagicNumber,0,clrRed);

if(ticket<0)

Print("OrderSend failed with error #",GetLastError());

sonst

Print("OrderSend erfolgreich abgeschlossen");

}


//- Ändern Sie den Auftrag durch Hinzufügen von Take Profit und Stop Loss

for(int i = OrdersTotal()-1; i>=0; i--)

if(OrderSelect(i, SELECT_BY_POS))

if(AuftragSymbol()==Symbol())

if(OrderMagicNumber()== MagicNumber)

{

if(Auftragsart()==OP_BUY)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,Digits(),NormalizeDouble(OrderOpenPrice()+tp,Digits(),0,clrGreen))

Print("OrderModify OK!");

sonst

Print("OrderModify BUY failed #", GetLastError());

}

if(OrderType()==OP_SELL)

{

if(OrderStopLoss()==0 || OrderTakeProfit()==0)

if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,Digits(),NormalizeDouble(OrderOpenPrice()-tp,Digits(),0,clrRed))

Print("OrderModify OK!");

sonst

Print("OrderModify SELL failed #", GetLastError());

}

}


}

//+------------------------------------------------------------------+


 
Auf meinem alten Laptop mit i3-Prozessor war noch WinXP 32 bit installiert, MT5 wurde nicht unterstützt. Kürzlich wurde der Arbeitsspeicher auf 6 GB erweitert, und ich möchte ein 64-Bit-Betriebssystem installieren, auf dem MT4 und MT5 laufen. Was ist vorzuziehen - Win7 oder Win8.1?
 
atztek #:
Auf meinem alten Laptop mit i3-Prozessor war noch WinXP 32 bit installiert, MT5 wurde nicht unterstützt. Ich habe kürzlich den Arbeitsspeicher auf 6 GB erhöht und möchte ein 64-Bit-Betriebssystem installieren, auf dem MT4 und MT5 laufen. Was ist vorzuziehen - Win7 oder Win8.1?

10

 
Andrey Sokolov #:

10

Diese Version ist auf einem neuen Laptop installiert, der durch ständige Updates gelangweilt ist. Außerdem schreiben die Leute, dass auf alten Laptops acht besser laufen als zehn. Ich würde WinXP auf meinem alten Laptop belassen, aber MT5 läuft darauf nicht, außerdem reichen 3Gb Arbeitsspeicher für XP nicht aus. Dennoch, wenn die Wahl zwischen 7 und 8.1 ist, was ist besser für die Durchführung von Optimierungen auf MT4/5?