Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1309

 
Порт-моне тв:

@MakarFX,danke.... Ich erhalte diese Fehler beim Kompilieren

'CounterOrderTradeType' - Funktion nicht definiert test for many expt trade.mq4 48 19

'CounterOrderTradeType' - Funktionsdeklarationen sind nur auf globaler Ebene, im Namespace oder im Klassenbereich erlaubt test for many expt trade.mq4 141 5


die gelbe Hervorhebung korrigieren


 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0; 

int OrderOfSymbol;
//+------------------------------------------------------------------+
....
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  OrderOfSymbol=CounterOrderTradeType(-1);

...

//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
MakarFX:

Korrigieren Sie, was Sie gelb markiert haben.


Ich erkannte, dass es sich um diese Segmente handelte, und versuchte, die Variablen neu zu definieren, was aber nicht half. Ich arbeite mit mql4 (mit 5 bin ich nicht vertraut, falls es da einen Unterschied gibt), also bitte ich wieder um Hilfe
 
Порт-моне тв:
Ich erkannte, dass es sich um diese Segmente handelte, und versuchte, die Variablen neu zu definieren, was aber nicht half. Ich bin in mql4 (ich bin nicht vertraut mit mql5, falls es anders ist), also bitte helfen Sie mir noch einmal.
Gib mir den Code, dann sehe ich nach, was los ist.
 
MakarFX:
Gib mir den Code, dann sehe ich nach, was los ist.
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#property link "https://www.mql5.com"
#Eigenschaft Version "1.00"
#Eigenschaft streng

extern int Magic = 6477;
extern double Lot = 0,01;
extern int Schlupf = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone, //Eröffnungskurs der ersten Kerze
Opentwo, //Eröffnungskurs der zweiten Kerze
Closeone, //Schlusskurs der ersten Kerze
Closetwo, //die Szene der zweiten Kerze
Lowone, //der Mindestpreis der ersten Kerze
Lowtwo, //der Preis der ersten Kerze
Lowthree, //die Szene des Minimums der dritten Kerze
Openthree, //Eröffnungskurs einer dritten Kerze
Closethree, //Schlusskurs der dritten Kerze
CloseOrder, //Auftrag abschließen
Highone, //Maximalpreis der ersten Kerze
Hightwo, //das Preishoch der zweiten Kerze
Highhree, //das Kursmaximum der zweiten Kerze
Highfour, //der Preis ist das Maximum der zweiten Kerze
Highfive, //Preis für maximal eine zweite Kerze
Highsix, //Preis der maximalen zweiten Kerze.
Highseven, //Preis der maximalen zweiten Kerze
Highheight, //Preis für maximal eine zweite Kerze
Lowfour, //der Preis für das Minimum der vierten Kerze
Lowfive, //erster Preis für eine fünfte Kerze
Lowsix, //die Szene eines sechsten Kerzenminimums
Lowseven, //die Szene mit mindestens einer siebten Kerze
Loweight, //die Szene des Minimums der achten Kerze
Closefour, //der Schlusskurs der vierten Kerze
Openfour,
Niedrig15,
Niedrig25,
SLbuy, TPbuy, SLsell, TPsell, //Eröffnungskurs der vierten Kerze
OrderOpenPrice;
int ticket, ticketclose;
int OrderOfSymbol;

//+------------------------------------------------------------------+
Experten-Initialisierungsfunktion //|.
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Experten-Tick-Funktion |
//+------------------------------------------------------------------+
void OnTick()
{
OrderOfSymbol=CounterOrderTradeType(-1);
//--- Ermittlung der Preise für die benötigten Stäbe
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Periode,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Periode, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Periode, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Periode,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);


//-------------функции---------------------------------------




wenn ( Ask>0 && Bid >0)
{

wenn (Auftragssumme()<1)
wenn (Schließen[1]>Öffnen[1])
if(Frage>NiederBB)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
if(AufträgeSumme()==1)
if(Gebot>OberBB)
CloseBuyPositions1();
}

//+------------------------------------------------------------------+
//| Auftragszählung |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
{
int cnt=0;
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) weiter;
if(OrderSymbol()!=_Symbol) weiter;
if(order_type == OrderType() || order_type == -1) cnt++;
}
//----
zurück(cnt);
}


//---- Ende der Funktion
}
//---------------------------------------------------------------------
void CloseBuyPositions1()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol())
{


if(Auftragsart()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}
}
}




Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Порт-моне тв:

die falsche Klammer ...fangen.

 //+------------------------------------------------------------------+
//|                                                   sova_2bars.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone,    //цена открытия первой свечи
Opentwo,    //цена открытия второй свечи
Closeone,   //цена закрытия первой свечи
Closetwo,   //цена закрытия второй свечи
Lowone,     //цена минимальная первой свечи
Lowtwo,     //цена минимальная второй свечи
Lowthree,   //цена минимальная третьей свечи
Openthree,  //цена открытия третьей свечи
Closethree, //цена закрытия третьей свечи
CloseOrder, //закрыть ордер
Highone,    //цена максимальная первой свечи
Hightwo,    //цена максимальная второй свечи
Highthree,    //цена максимальная второй свечи
Highfour,    //цена максимальная второй свечи
Highfive,    //цена максимальная второй свечи
Highsix,    //цена максимальная второй свечи
Highseven,    //цена максимальная второй свечи
Higheight,    //цена максимальная второй свечи
Lowfour,    //цена минимальная четвертой свечи
Lowfive,    //цена минимальная пятой свечи
Lowsix,    //цена минимальная шестой свечи
Lowseven,    //цена минимальная седьмой свечи
Loweight,    //цена минимальная восьмой свечи
Closefour,  //цена закрытия четвертой свечи
Openfour,
Low15,
Low25, 
SLbuy, TPbuy,  SLsell, TPsell,   //цена открытия четвертой свечи
OrderOpenPrice;
int ticket, ticketclose; 
int OrderOfSymbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  OrderOfSymbol=CounterOrderTradeType(-1); 
//--- определение цен необходимых баров
   Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
   Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
   Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
   Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
   Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
   Highfive  = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
   Highsix  = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
   Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
   Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
   Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
   Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
   Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
   Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
   Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
   Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
   Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
   Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
   Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
   Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
   Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
   Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
   Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
   Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
   Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
   Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

     
//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5); 
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5); 
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);


//-------------функции---------------------------------------
            
if ( Ask>0 && Bid >0)
   {

 if (OrdersTotal()<1)
    if (Close[1]>Open[1])
    if(Ask>LowerBB)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrdersTotal()==1)
   if(Bid>UpperBB)
    CloseBuyPositions1();
   }
}
//----конец функции
//---------------------------------------------------------------------
void CloseBuyPositions1()
      {
      
       for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol())
              {


          
          if(OrderType()==OP_BUY)
             {
              if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}
             }
          }
       } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }   
       
 
Порт-моне тв:

Das ist es, was ich nicht verstehe.

if ( Ask>0 && Bid >0)

Warum?

 
MakarFX:

Das ist es, was ich nicht verstehe.

Warum?

Ich tue dies, damit ich nicht zusätzliche Funktionen mit all den Klammern schreiben und dann mit den Indikatoren dieser Funktion experimentieren muss, indem ich diesen allgemein bekannten Wert ändere
 
Порт-моне тв:
Ich tue dies, damit ich keine zusätzlichen Funktionen mit all den Klammern schreiben muss, und dann experimentiere ich mit den Indikatoren dieser Funktion

Ich würde dies tun

//-------------функции---------------------------------------
            
 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
      if(Ask>LowerBB)
         {
         if(OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue)){Print("Buy Order Open");}
         }
         
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol)
            if(Bid>UpperBB)
               CloseBuyPositions1();
   }
//----конец функции
 
MakarFX:

Мне вот это не понятно

зачем?


Das Problem ist nicht gelöst, geöffnet, um auf einem Diagramm, auf der zweiten will nicht, zählt OrdersTotal offenbar wieder auf allen (wenn etwas der Zauberer hat sich geändert, auch eine separate Berater zusammengestellt)

 
Порт-моне тв:

Das Problem ist nicht gelöst, geöffnet, um auf einem Diagramm, auf der zweiten will nicht, zählt OrdersTotal offenbar wieder auf alle (wenn etwas der Zauberer hat sich geändert, auch eine separate Berater zusammengestellt)

Setzen Sie die Funktion aus meinem Beitrag ein. Das funktioniert bei mir