//+------------------------------------------------------------------+//| 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"inputdouble TakeProfit =2190;
inputdouble Lots =0.5;
inputdouble TrailingStop =650;
inputint OpenLevel =70;
inputint CloseLevel=23;
inputintPeriod =86;
inputint Period1 =87;
int LastBars=0;
externint Magic1 = 110721;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick(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 arrivedif(LastBars!=Bars) LastBars=Bars;
elsereturn(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 variablesif(CountOrders("", -1,Magic1)<1)
total=OrdersTotal();
if(total<1)
{
//--- no opened orders identifiedif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibilityif(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());
}
elsePrint("Error opening BUY order : ",GetLastError());
return;
}
//--- check for short position (SELL) possibilityif(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());
}
elsePrint("Error opening SELL order : ",GetLastError());
}
//--- exit from the "no opened orders" blockreturn;
}
//--- 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 openedif(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 exitif(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stopif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exitif(!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 exitif(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exitif(!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);
}
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?
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
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.
Ist das die richtige Entscheidung?
Ist das die richtige Entscheidung?
Danke. Es ist kompliziert, ich habe es vereinfacht, nur ein paar Zeilen.
Danke. Es ist kompliziert, ich habe es vereinfacht, nur ein paar Zeilen.
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.
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.