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

 
//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
input double TakeProfit    =2190;
input double Lots          =0.5;
input double TrailingStop  =650;
input int OpenLevel =70;
input int CloseLevel=23;
input int    Period =86;
input int    Period1 =87;
int LastBars=0;
extern int Magic1 = 110721;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   
 
   int    cnt,ticket,total;
//---
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//---
//--- Trade only if new bar has arrived
   if(LastBars!=Bars) LastBars=Bars;
   else return(0);
   if(Bars<100)
     {
      Print("bars less than 100");
      return;
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return;
     }
//--- to simplify the coding and speed up access data are put into internal variables
   if(CountOrders("", -1,Magic1)<1)
     
   total=OrdersTotal();
   if(total<1)
     {
      //--- no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ",AccountFreeMargin());
         return;
        }
      //--- check for long position (BUY) possibility
     if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period)>iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period1)) 
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-TakeProfit*Point,Bid+TakeProfit*Point,"GBPCADD",Magic1,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY order opened : ",OrderOpenPrice());
           }
         else
            Print("Error opening BUY order : ",GetLastError());
         return;
        }
      //--- check for short position (SELL) possibility
      if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period1)<iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period)) 
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+TakeProfit*Point,Ask-TakeProfit*Point,"GBPCADD",Magic1,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL order opened : ",OrderOpenPrice());
           }
         else
            Print("Error opening SELL order : ",GetLastError());
        }
      //--- exit from the "no opened orders" block
      return;
     }
//--- it is important to enter the market correctly, but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic1)  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
              if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period1)<iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period)) 
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
           if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period)>iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period1)) 
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }
//---
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Подсчет ордеров                                                            |
//+----------------------------------------------------------------------------+
//| -1 - Все типы ордеров                                                      |
//|  0 - ордера типа BUY                                                       |
//|  1 - ордера типа SELL                                                      |
//|  2 - ордера типа BUYLIMIT                                                  |
//|  3 - ордера типа SELLLIMIT                                                 |
//|  4 - ордера типа BUYSTOP                                                   |
//|  5 - ордера типа SELLSTOP                                                  |
//+----------------------------------------------------------------------------+
int CountOrders(string symb="", int or_ty=-1, int magiс=-1) 
  {
   int cnt=0;
   if(symb=="0") symb=_Symbol;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if((OrderSymbol()==symb || symb=="")&&(or_ty<0 || or_ty==OrderType()))
           {
            if(magiс<0 || OrderMagicNumber()==magiс) cnt++;
           }
        }
     }
   return(cnt);
  }

Ist das die richtige Entscheidung?

 
darirunu1:

Ist das die richtige Entscheidung?

//--- to simplify the coding and speed up access data are put into internal variables
   if(CountOrders("", -1,Magic1)<1)
     
   total=OrdersTotal();
   if(total<1)
 
MakarFX:

Danke. Es ist kompliziert, ich habe es vereinfacht, nur ein paar Zeilen.

 
darirunu1:

Danke. Es ist kompliziert, ich habe es vereinfacht, nur ein paar Zeilen.

Interessant zu sehen, wenn es nicht zu viel Mühe macht.
 
MakarFX:
interessant zu sehen, ob

for(i=k; i>=0; i--) {

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

if(AuftragsSymbol()==Symbol()) {

if(OrderMagicNumber()== Magic) {

{ if(OrderType()>1) weiter;

if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;

}}}}

//---

// total=OrdersTotal();

if(gesamt<1)

{

 

Hallo zusammen, ich wollte meine eigene Funktionsbibliothek erstellen, weil ich oft die gleichen Funktionen in meinen Robotern verwende. Ich habe alles richtig gemacht. Ich habe die Bibliothek erstellt, sie in den Libraries-Ordner gelegt und sie mit #import in meinen Indikator eingebunden

#import "andylib.ex4".

bool KeyPr (long l, string k);

string TestFunc ();

#import

Angegebene Funktionen in der Bibliothek mit einer Beschreibung. Die Funktionen der Bibliothek werden jedoch nicht aufgerufen. Ich habe versucht, den Dialog in den Ordner der Indikatoren oder sogar direkt in denselben Ordner mit dem Indikator, der mit dem Dialog verbunden ist, zu legen, ohne Ergebnis. Was könnte das Problem sein?

 
Евгений Гуцу:

Hallo zusammen, ich wollte meine eigene Funktionsbibliothek erstellen, weil ich oft die gleichen Funktionen in meinen Robotern verwende. Ich habe alles richtig gemacht. Ich habe die Bibliothek erstellt, sie in den Libraries-Ordner gelegt und sie mit #import in meinen Indikator eingebunden

#import "andylib.ex4".

bool KeyPr (long l, string k);

string TestFunc ();

#import

Angegebene Funktionen in der Bibliothek mit einer Beschreibung. Die Funktionen der Bibliothek werden jedoch nicht aufgerufen. Ich habe versucht, den Dialog in den Ordner der Indikatoren oder sogar direkt in denselben Ordner mit dem Indikator, der mit dem Dialog verbunden ist, zu legen, ohne Ergebnis. Was könnte das Problem sein?

einschließen.

Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
Документация по MQL5: Основы языка / Препроцессор / Включение файлов (#include)
  • www.mql5.com
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
darirunu1:

for(i=k; i>=0; i--) {

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

if(AuftragSymbol()==Symbol()) {

if(OrderMagicNumber()== Magic) {

{ if(OrderType()>1) weiter;

if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;

}}}}

//---

// total=OrdersTotal();

if(gesamt<1)

{

Was Sie geschrieben haben, kann nicht funktionieren.

Zuerst berechnen Sie "total++" und setzen dann "OrdersTotal()" auf Null, d.h. alle Aufträge

 
Евгений Гуцу:

Hallo zusammen, ich wollte meine eigene Funktionsbibliothek erstellen, weil ich oft die gleichen Funktionen in meinen Robotern verwende. Ich habe alles richtig gemacht. Ich habe die Bibliothek erstellt, sie in den Libraries-Ordner gelegt und sie mit #import in meinen Indikator eingebunden

#import "andylib.ex4".

bool KeyPr (long l, string k);

string TestFunc ();

#import

Angegebene Funktionen in der Bibliothek mit einer Beschreibung. Funktionen aus der Bibliothek werden jedoch nicht aufgerufen. Ich habe versucht, den Dialog in den Ordner der Indikatoren oder sogar direkt in denselben Ordner mit dem Indikator, der mit dem Dialog verbunden ist, zu legen, ohne Ergebnis. Was könnte das Problem sein?

Haben Sie daran gedacht, in der Bibliothek hinter den Funktionsnamen export zu schreiben?

Noch besser ist es, keine Bibliothek zu erstellen, sondern eine .mqh-Datei mit Funktionen, auch ohne Klasse, und die Kompilierung wird nur die Funktionen übernehmen, die benötigt werden und vom EA/Indikator aufgerufen werden.
 
Wie berechnet man eine Provision für offene Aufträge in mt5 für jedes Paar separat?
Grund der Beschwerde: