Jeder der dir helfen würde weiß das es mit dem eine "Stück" Code nicht getan ist. Es wird ein Faß ohne Boden werden da du immer neue Fragen hast.
Du musst lernen den Code zu verstehen , der Weg über andere hilft dir nicht weiter.
Schon mal den Artikel versucht ? Da ist alles drin was du suchst.
https://www.mql5.com/de/articles/171
Gruß
- 2016.03.14
- MetaQuotes Software Corp.
- www.mql5.com
Einen Artikel für Einsteiger den ich recht gut finde ist hier https://www.mql5.com/de/articles/100
Und auch sonst gibt's Artikel und Codebeispiele wie Sand am Meer.
Viel Erfolg !
- 2016.01.12
- Samuel Olowoyo
- www.mql5.com
Jeder der dir helfen würde weiß das es mit dem eine "Stück" Code nicht getan ist. Es wird ein Faß ohne Boden werden da du immer neue Fragen hast.
Du musst lernen den Code zu verstehen , der Weg über andere hilft dir nicht weiter.
Schon mal den Artikel versucht ? Da ist alles drin was du suchst.
https://www.mql5.com/de/articles/171
Gruß
Hallo Christian,
vielen Dank.
Das was auf deinem angegebenen Link zu finden ist, weiß ich schon alles.
Einen EA mit 5 MAs kann ich erstellen und die Trailing- und Moneyeigenschaften einstellen habe ich auch kein Problem. Auch das Optimieren usw. alles easy.
Aber woher ich diese Parameter bekomme, das war meine Frage.
Von mir im Programm dann einstellbar, gerne auch durch ausblenden/ändern im MQL5-Code:
Handel wenn
- Signal_MA1 fällt (oder steigt) und
- Signal_MA2 fällt (oder steigt) und
- Signal_MA3 fällt (oder steigt) und
- Signal_MA4 um x.xx > Signal_MA5 oder (um x.xx < Signal_MA5)
- EA soll Sell und Buy (oder Nur Sell) (oder nur Buy) handeln
Du hast ihn leider nur überflogen und nicht verstanden.
Mit Hilfe des Wizard ist der EA im nu erstellt.
Die verschieden MAs eintragen
Unter filter0 ...filter1 ...filter2 sind alle Mas zu finden. Du musst sie nur noch so kombinieren wie du sie brauchst.
Der Wizard erstellt OOP Code der für einen Anfänger schwerer zu verstehen ist. Aber es einem leichter macht schnell viel Code zu erzeugen.
Baue einen EA damit und nimm erst einmal nur ein MA .
Verändere denn Filter0 und lerne die Effekte. Erst dann bist du in der Lage die gewünschte Bedingung zum Handeln selbst zu erstellen.
Gruß
Einen Artikel für Einsteiger den ich recht gut finde ist hier https://www.mql5.com/de/articles/100
Und auch sonst gibt's Artikel und Codebeispiele wie Sand am Meer.
Viel Erfolg !
Vielen Dank.
Habe soeben etwa die Hälfte gelesen.
Kann mir vorstellen, dass ich hier meine Fragen beantwortet finde.
Ich suche einfach die Werte und wie man die weiter verarbeitet.
Ich sende hier mal einen kompletten EA aus dem was im standard MT5 dabei ist.
Das Problem ist das jeder Programmierer seinen eigene Handschrift hat. Und ein un der selbe EA kann auf x verschieden Arten geschrieben werden.
Für einen der den Code nicht lesen kann sehen alle verscheiden aus. Nur der der den lesen kann erkennt die unterschiedliche Schreibweise. Es gibt nicht DEN Code. Aber das nur nebenbei.
So hier der Code
//| Moving Averages.mq5 |
//| Copyright 2010, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#include <Trade\Trade.mqh>
input double MaximumRisk = 2; // Maximum Risk in percentage
input double DecreaseFactor = 3; // Descrease factor
input int MovingPeriodEURUSD = 13; // Moving Average period on EURUSD
input int MovingShiftEURUSD = 0; // Moving Average shift on EURUSD
input int MovingPeriodGBPUSD = 13; // Moving Average period on GBPUSD
input int MovingShiftGBPUSD = 0; // Moving Average shift on GBPUSD
input int MovingPeriodUSDCHF = 13; // Moving Average period on USDCHF
input int MovingShiftUSDCHF = 0; // Moving Average shift on USDCHF
input int MovingPeriodUSDJPY = 13; // Moving Average period on USDJPY
input int MovingShiftUSDJPY = 0; // Moving Average shift on USDJPY
//--- iMA handlers
int ExtHandleEURUSD=0;
int ExtHandleGBPUSD=0;
int ExtHandleUSDCHF=0;
int ExtHandleUSDJPY=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- we can trade just on demo account
int check=CheckAccount();
if(check<0) // trading is prohibited
return(check);
//--- create MA on EURUSD
int res=CreateMA(ExtHandleEURUSD,MovingPeriodEURUSD,MovingShiftEURUSD,"EURUSD");
if(res<0) return(res);
//--- create MA on GBPUSD
res=CreateMA(ExtHandleGBPUSD,MovingPeriodGBPUSD,MovingShiftGBPUSD,"GBPUSD");
if(res<0) return(res);
//--- create MA on USDCHF
res=CreateMA(ExtHandleUSDCHF,MovingPeriodUSDCHF,MovingShiftUSDCHF,"USDCHF");
if(res<0) return(res);
//--- create MA on USDJPY
res=CreateMA(ExtHandleUSDJPY,MovingPeriodUSDJPY,MovingShiftUSDJPY,"USDJPY");
if(res<0) return(res);
//---
return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- check for EURUSD
if(ExtHandleEURUSD)
{
if(PositionSelect("EURUSD")) CheckForClose("EURUSD",ExtHandleEURUSD);
else CheckForOpen("EURUSD",ExtHandleEURUSD);
}
//--- check for GBPUSD
if(ExtHandleGBPUSD)
{
if(PositionSelect("GBPUSD")) CheckForClose("GBPUSD",ExtHandleGBPUSD);
else CheckForOpen("GBPUSD",ExtHandleGBPUSD);
}
//--- check for USDCHF
if(ExtHandleUSDCHF)
{
if(PositionSelect("USDCHF")) CheckForClose("USDCHF",ExtHandleUSDCHF);
else CheckForOpen("USDCHF",ExtHandleUSDCHF);
}
//--- check for USDJPY
if(ExtHandleUSDJPY)
{
if(PositionSelect("USDJPY")) CheckForClose("USDJPY",ExtHandleUSDJPY);
else CheckForOpen("USDJPY",ExtHandleUSDJPY);
}
//---
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Cretae Moving Average for the symbol |
//+------------------------------------------------------------------+
int CreateMA(int &handle,const int period,const int shift,const string symbol)
{
if(period>5)
{
//--- check symbol
if(SymbolInMarketWatch(symbol))
{
ExtHandleUSDJPY=iMA(symbol,_Period,period,shift,MODE_SMA,PRICE_CLOSE);
if(ExtHandleUSDJPY==INVALID_HANDLE)
{
printf("Error creating MA indicator for ",symbol);
return(-4);
}
}
else
{
Print(__FUNCTION__,"Failed to add ",symbol);
return(-5);
}
}
//--- Indicator was successfully created
return(0);
}
//+------------------------------------------------------------------+
//| Check if Symbol is in MarketWatch |
//+------------------------------------------------------------------+
bool SymbolInMarketWatch(const string symbol)
{
//---
bool found=false;
//--- The number of symbols available in MarketWatch
int total=SymbolsTotal(true);
//--- Go through all symbols
for(int i=0;i<total;i++)
{
if(symbol==SymbolName(i,true))
{
found=true;
break;
}
}
//--- If the symbol is not found in Market Watch
if(!found)
{
//--- Try to add it there
if(!SymbolSelect(symbol,true))
{
//--- Unsuccessful execution
Print(__FUNCTION__,": Failed to add ",symbol);
return(false); // No symbol in MarketWatch
}
}
//--- The symbol exists in MarketWatch
return(true);
}
//+------------------------------------------------------------------+
//| Trading is allowed just on demo account |
//+------------------------------------------------------------------+
int CheckAccount()
{
//--- Check if autotrading is allowed
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
{
Alert("Autotrading is disabled in the terminal, the EA will be removed");
return(-1);
}
//--- Trading on a real account is prohibited
if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
{
Alert("The EA is not allowed to trade on a real account!");
return(-2);
}
//--- Can we trade on the current account (prohibited when using an investor password)
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Alert("Trading on this account is prohibited");
return(-3);
}
//--- Checks have been passed successfully
return(0);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double TradeSizeOptimized(string symbol)
{
double price=0.0;
double margin=0.0;
//--- select lot size
if(!SymbolInfoDouble(symbol,SYMBOL_ASK,price)) return(0.0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,symbol,1.0,price,margin)) return(0.0);
if(margin<=0.0) return(0.0);
double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/100.0/margin,2);
//--- calculate number of losses orders without a break
if(DecreaseFactor>0)
{
//--- select history for access
HistorySelect(0,TimeCurrent());
//---
int orders=HistoryDealsTotal(); // total history deals
int losses=0; // number of losses orders without a break
for(int i=orders-1;i>=0;i--)
{
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
{
Print("HistoryDealGetTicket failed, no trade history");
break;
}
//--- check symbol
if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=symbol) continue;
//--- check profit
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
if(profit>0.0) break;
if(profit<0.0) losses++;
}
//---
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- normalize and check limits
double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);
double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
if(lot<minvol) lot=minvol;
double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
if(lot>maxvol) lot=maxvol;
//--- return trading volume
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open position conditions |
//+------------------------------------------------------------------+
void CheckForOpen(string symbol,int handle)
{
MqlRates rt[2];
//--- go trading only for first ticks of new bar
if(CopyRates(symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",symbol," failed, no history");
return;
}
if(rt[1].tick_volume>1) return;
//--- get current Moving Average
double ma[2];
if(CopyBuffer(handle,0,0,2,ma)!=2)
{
Print("CopyBuffer from iMA failed, no data");
return;
}
//--- check signals
ENUM_ORDER_TYPE signal=WRONG_VALUE;
if(rt[0].open>ma[0] && rt[0].close<ma[0]) signal=ORDER_TYPE_SELL; // sell conditions
else
if(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // buy conditions
//--- additional checking
if(signal!=WRONG_VALUE)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(symbol,_Period)>100)
{
CTrade trade;
trade.PositionOpen(symbol,signal,TradeSizeOptimized(symbol),
SymbolInfoDouble(symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),
0,0);
}
//---
}
//+------------------------------------------------------------------+
//| Check for close position conditions |
//+------------------------------------------------------------------+
void CheckForClose(string symbol,int handle)
{
MqlRates rt[2];
//--- go trading only for first ticks of new bar
if(CopyRates(symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",symbol," failed, no history");
return;
}
if(rt[1].tick_volume>1) return;
//--- get current Moving Average
double ma[1];
if(CopyBuffer(handle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
return;
}
//--- positions already selected before
bool signal=false;
long type=PositionGetInteger(POSITION_TYPE);
if(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0]) signal=true;
if(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0]) signal=true;
//--- additional checking
if(signal)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(symbol,_Period)>100)
{
CTrade trade;
trade.PositionClose(symbol,3);
}
//---
}
//+------------------------------------------------------------------+
Hier ist genau die Stelle an der die Bedingungen stehen. Also wo entschieden wird ob ein Trade startet.
else
if(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // buy conditions
Setz dich in Ruhe davor und versuche JEDE Zeile zu verstehen was da genau gemacht wird.
Zeit Zeit Zeit .......:-) ist der Schlüssel
if(rt[0].open>ma[0] && rt[0].close<ma[0]) signal=ORDER_TYPE_SELL; // sell conditions
ma[0] ist der aktuelle Wert des MA
ma[1] wäre der davor
usw...
Wenn ma[0] kleiner als ma[1] = fallender MA
Ich sende hier mal einen kompletten EA aus dem was im standard MT5 dabei ist.
Das Problem ist das jeder Programmierer seinen eigene Handschrift hat. Und ein un der selbe EA kann auf x verschieden Arten geschrieben werden.
Für einen der den Code nicht lesen kann sehen alle verscheiden aus. Nur der der den lesen kann erkennt die unterschiedliche Schreibweise. Es gibt nicht DEN Code. Aber das nur nebenbei.
So hier der Code
//| Moving Averages.mq5 |
//| Copyright 2010, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#include <Trade\Trade.mqh>
input double MaximumRisk = 2; // Maximum Risk in percentage
input double DecreaseFactor = 3; // Descrease factor
input int MovingPeriodEURUSD = 13; // Moving Average period on EURUSD
input int MovingShiftEURUSD = 0; // Moving Average shift on EURUSD
input int MovingPeriodGBPUSD = 13; // Moving Average period on GBPUSD
input int MovingShiftGBPUSD = 0; // Moving Average shift on GBPUSD
input int MovingPeriodUSDCHF = 13; // Moving Average period on USDCHF
input int MovingShiftUSDCHF = 0; // Moving Average shift on USDCHF
input int MovingPeriodUSDJPY = 13; // Moving Average period on USDJPY
input int MovingShiftUSDJPY = 0; // Moving Average shift on USDJPY
//--- iMA handlers
int ExtHandleEURUSD=0;
int ExtHandleGBPUSD=0;
int ExtHandleUSDCHF=0;
int ExtHandleUSDJPY=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- we can trade just on demo account
int check=CheckAccount();
if(check<0) // trading is prohibited
return(check);
//--- create MA on EURUSD
int res=CreateMA(ExtHandleEURUSD,MovingPeriodEURUSD,MovingShiftEURUSD,"EURUSD");
if(res<0) return(res);
//--- create MA on GBPUSD
res=CreateMA(ExtHandleGBPUSD,MovingPeriodGBPUSD,MovingShiftGBPUSD,"GBPUSD");
if(res<0) return(res);
//--- create MA on USDCHF
res=CreateMA(ExtHandleUSDCHF,MovingPeriodUSDCHF,MovingShiftUSDCHF,"USDCHF");
if(res<0) return(res);
//--- create MA on USDJPY
res=CreateMA(ExtHandleUSDJPY,MovingPeriodUSDJPY,MovingShiftUSDJPY,"USDJPY");
if(res<0) return(res);
//---
return(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- check for EURUSD
if(ExtHandleEURUSD)
{
if(PositionSelect("EURUSD")) CheckForClose("EURUSD",ExtHandleEURUSD);
else CheckForOpen("EURUSD",ExtHandleEURUSD);
}
//--- check for GBPUSD
if(ExtHandleGBPUSD)
{
if(PositionSelect("GBPUSD")) CheckForClose("GBPUSD",ExtHandleGBPUSD);
else CheckForOpen("GBPUSD",ExtHandleGBPUSD);
}
//--- check for USDCHF
if(ExtHandleUSDCHF)
{
if(PositionSelect("USDCHF")) CheckForClose("USDCHF",ExtHandleUSDCHF);
else CheckForOpen("USDCHF",ExtHandleUSDCHF);
}
//--- check for USDJPY
if(ExtHandleUSDJPY)
{
if(PositionSelect("USDJPY")) CheckForClose("USDJPY",ExtHandleUSDJPY);
else CheckForOpen("USDJPY",ExtHandleUSDJPY);
}
//---
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Cretae Moving Average for the symbol |
//+------------------------------------------------------------------+
int CreateMA(int &handle,const int period,const int shift,const string symbol)
{
if(period>5)
{
//--- check symbol
if(SymbolInMarketWatch(symbol))
{
ExtHandleUSDJPY=iMA(symbol,_Period,period,shift,MODE_SMA,PRICE_CLOSE);
if(ExtHandleUSDJPY==INVALID_HANDLE)
{
printf("Error creating MA indicator for ",symbol);
return(-4);
}
}
else
{
Print(__FUNCTION__,"Failed to add ",symbol);
return(-5);
}
}
//--- Indicator was successfully created
return(0);
}
//+------------------------------------------------------------------+
//| Check if Symbol is in MarketWatch |
//+------------------------------------------------------------------+
bool SymbolInMarketWatch(const string symbol)
{
//---
bool found=false;
//--- The number of symbols available in MarketWatch
int total=SymbolsTotal(true);
//--- Go through all symbols
for(int i=0;i<total;i++)
{
if(symbol==SymbolName(i,true))
{
found=true;
break;
}
}
//--- If the symbol is not found in Market Watch
if(!found)
{
//--- Try to add it there
if(!SymbolSelect(symbol,true))
{
//--- Unsuccessful execution
Print(__FUNCTION__,": Failed to add ",symbol);
return(false); // No symbol in MarketWatch
}
}
//--- The symbol exists in MarketWatch
return(true);
}
//+------------------------------------------------------------------+
//| Trading is allowed just on demo account |
//+------------------------------------------------------------------+
int CheckAccount()
{
//--- Check if autotrading is allowed
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
{
Alert("Autotrading is disabled in the terminal, the EA will be removed");
return(-1);
}
//--- Trading on a real account is prohibited
if(AccountInfoInteger(ACCOUNT_TRADE_MODE)==ACCOUNT_TRADE_MODE_REAL)
{
Alert("The EA is not allowed to trade on a real account!");
return(-2);
}
//--- Can we trade on the current account (prohibited when using an investor password)
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{
Alert("Trading on this account is prohibited");
return(-3);
}
//--- Checks have been passed successfully
return(0);
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size |
//+------------------------------------------------------------------+
double TradeSizeOptimized(string symbol)
{
double price=0.0;
double margin=0.0;
//--- select lot size
if(!SymbolInfoDouble(symbol,SYMBOL_ASK,price)) return(0.0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,symbol,1.0,price,margin)) return(0.0);
if(margin<=0.0) return(0.0);
double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/100.0/margin,2);
//--- calculate number of losses orders without a break
if(DecreaseFactor>0)
{
//--- select history for access
HistorySelect(0,TimeCurrent());
//---
int orders=HistoryDealsTotal(); // total history deals
int losses=0; // number of losses orders without a break
for(int i=orders-1;i>=0;i--)
{
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
{
Print("HistoryDealGetTicket failed, no trade history");
break;
}
//--- check symbol
if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=symbol) continue;
//--- check profit
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
if(profit>0.0) break;
if(profit<0.0) losses++;
}
//---
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- normalize and check limits
double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);
double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
if(lot<minvol) lot=minvol;
double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
if(lot>maxvol) lot=maxvol;
//--- return trading volume
return(lot);
}
//+------------------------------------------------------------------+
//| Check for open position conditions |
//+------------------------------------------------------------------+
void CheckForOpen(string symbol,int handle)
{
MqlRates rt[2];
//--- go trading only for first ticks of new bar
if(CopyRates(symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",symbol," failed, no history");
return;
}
if(rt[1].tick_volume>1) return;
//--- get current Moving Average
double ma[2];
if(CopyBuffer(handle,0,0,2,ma)!=2)
{
Print("CopyBuffer from iMA failed, no data");
return;
}
//--- check signals
ENUM_ORDER_TYPE signal=WRONG_VALUE;
if(rt[0].open>ma[0] && rt[0].close<ma[0]) signal=ORDER_TYPE_SELL; // sell conditions
else
if(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // buy conditions
//--- additional checking
if(signal!=WRONG_VALUE)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(symbol,_Period)>100)
{
CTrade trade;
trade.PositionOpen(symbol,signal,TradeSizeOptimized(symbol),
SymbolInfoDouble(symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),
0,0);
}
//---
}
//+------------------------------------------------------------------+
//| Check for close position conditions |
//+------------------------------------------------------------------+
void CheckForClose(string symbol,int handle)
{
MqlRates rt[2];
//--- go trading only for first ticks of new bar
if(CopyRates(symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",symbol," failed, no history");
return;
}
if(rt[1].tick_volume>1) return;
//--- get current Moving Average
double ma[1];
if(CopyBuffer(handle,0,0,1,ma)!=1)
{
Print("CopyBuffer from iMA failed, no data");
return;
}
//--- positions already selected before
bool signal=false;
long type=PositionGetInteger(POSITION_TYPE);
if(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0]) signal=true;
if(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0]) signal=true;
//--- additional checking
if(signal)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Bars(symbol,_Period)>100)
{
CTrade trade;
trade.PositionClose(symbol,3);
}
//---
}
//+------------------------------------------------------------------+
Hier ist genau die Stelle an der die Bedingungen stehen. Also wo entschieden wird ob ein Trade startet.
else
if(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // buy conditions
Setz dich in Ruhe davor und versuche JEDE Zeile zu verstehen was da genau gemacht wird.
Zeit Zeit Zeit .......:-) ist der Schlüssel
Vielen Dank Christian,
hast Dir ja viel Mühe gemacht um den Code so zu gestalten, dass man ihn nicht 1:1 verwenden kann :-)
Mache ich ohnehin nicht. Ich möchte schon wirklich verstehen, was mein EA macht und lerne jeden Tag dazu.
Auf jeden fall eine super Basis, habe schon ein paar interessante Zeilen entdeckt.
Werde mich Morgen dran machen, alles zu verstehen. Melde mich dann wieder.
Nochmals vielen Dank.
Vielen Dank Christian,
hast Dir ja viel Mühe gemacht um den Code so zu gestalten, dass man ihn nicht 1:1 verwenden kann :-)
Mache ich ohnehin nicht. Ich möchte schon wirklich verstehen, was mein EA macht und lerne jeden Tag dazu.
Auf jeden fall eine super Basis, habe schon ein paar interessante Zeilen entdeckt.
Werde mich Morgen dran machen, alles zu verstehen. Melde mich dann wieder.
Nochmals vielen Dank.
Wenn du meintest das er nicht funktioniert hier der link dazu https://www.mql5.com/de/articles/download/403/multimovings.mq5
else
if(ichschreibanders[0].open<mama[0] && ichschreibanders[0].close>mama[0]) signal=ORDER_TYPE_BUY; // buy conditions
Habe den selben Code mal auf meine Weise geschrieben .....erkennst du jetzt warum es nicht einfügbar ist ?
Aber ich denke du meintest das du hier von uns ein Stück Code bekommst den du nur copy and paste artig bei dir ins irgendwo einfügen kannst.
Genau da ist dein Denkfehler. Du kannst keinen Code "einfügen" du musst ihn immer anpassen da du ja immer andere Namen von Variablen hast oder andere Strukturen.
Trenn dich davon den leichten Weg zu gehen.....sonst wirst du nur die Gewinne der anderen bezahlen
Wenn du meintest das er nicht funktioniert hier der link dazu https://www.mql5.com/de/articles/download/403/multimovings.mq5
else
if(ichschreibanders[0].open<mama[0] && ichschreibanders[0].close>mama[0]) signal=ORDER_TYPE_BUY; // buy conditions
Habe den selben Code mal auf meine Weise geschrieben .....erkennst du jetzt warum es nicht einfügbar ist ?
Aber ich denke du meintest das du hier von uns ein Stück Code bekommst den du nur copy and paste artig bei dir ins irgendwo einfügen kannst.
Genau da ist dein Denkfehler. Du kannst keinen Code "einfügen" du musst ihn immer anpassen da du ja immer andere Namen von Variablen hast oder andere Strukturen.
Trenn dich davon den leichten Weg zu gehen.....sonst wirst du nur die Gewinne der anderen bezahlen
Hallo Christian,
was Du sagst ist alles korrekt und verstehe ich auch.
Aber ich weiß nicht woher ich die Werte bekomme für die MAs.
Wenn ich mir standardmäßig z.B. 4 MAs reinhole dann bekomme ich z.B. folgenden Anfangscode und die Auswertung ob gekauft und verkauft werden soll erfolgt nach dem Standardprocedere.
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title ="4MA-test"; // Document name
ulong Expert_MagicNumber =2159; //
bool Expert_EveryTick =false; //
//--- inputs for main signal
input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100]
input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100]
input double Signal_PriceLevel =0.0; // Price level to execute a deal
input double Signal_StopLevel =50.0; // Stop Loss level (in points)
input double Signal_TakeLevel =50.0; // Take Profit level (in points)
input int Signal_Expiration =4; // Expiration of pending orders (in bars)
input int Signal_0_MA_PeriodMA =4800; // Moving Average(4800,0,...) Period of averaging
input int Signal_0_MA_Shift =0; // Moving Average(4800,0,...) Time shift
input ENUM_MA_METHOD Signal_0_MA_Method =MODE_EMA; // Moving Average(4800,0,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_0_MA_Applied =PRICE_CLOSE; // Moving Average(4800,0,...) Prices series
input double Signal_0_MA_Weight =1.0; // Moving Average(4800,0,...) Weight [0...1.0]
input int Signal_1_MA_PeriodMA =960; // Moving Average(960,0,...) Period of averaging
input int Signal_1_MA_Shift =0; // Moving Average(960,0,...) Time shift
input ENUM_MA_METHOD Signal_1_MA_Method =MODE_EMA; // Moving Average(960,0,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_1_MA_Applied =PRICE_CLOSE; // Moving Average(960,0,...) Prices series
input double Signal_1_MA_Weight =1.0; // Moving Average(960,0,...) Weight [0...1.0]
input int Signal_2_MA_PeriodMA =288; // Moving Average(288,0,...) Period of averaging
input int Signal_2_MA_Shift =0; // Moving Average(288,0,...) Time shift
input ENUM_MA_METHOD Signal_2_MA_Method =MODE_EMA; // Moving Average(288,0,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_2_MA_Applied =PRICE_CLOSE; // Moving Average(288,0,...) Prices series
input double Signal_2_MA_Weight =1.0; // Moving Average(288,0,...) Weight [0...1.0]
input int Signal_3_MA_PeriodMA =9; // Moving Average(9,0,MODE_SMA,...) Period of averaging
input int Signal_3_MA_Shift =0; // Moving Average(9,0,MODE_SMA,...) Time shift
input ENUM_MA_METHOD Signal_3_MA_Method =MODE_SMA; // Moving Average(9,0,MODE_SMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_3_MA_Applied =PRICE_CLOSE; // Moving Average(9,0,MODE_SMA,...) Prices series
input double Signal_3_MA_Weight =1.0; // Moving Average(9,0,MODE_SMA,...) Weight [0...1.0]
input int Signal_4_MA_PeriodMA =9; // Moving Average(9,6,MODE_SMA,...) Period of averaging
input int Signal_4_MA_Shift =6; // Moving Average(9,6,MODE_SMA,...) Time shift
input ENUM_MA_METHOD Signal_4_MA_Method =MODE_SMA; // Moving Average(9,6,MODE_SMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_4_MA_Applied =PRICE_CLOSE; // Moving Average(9,6,MODE_SMA,...) Prices series
input double Signal_4_MA_Weight =1.0; // Moving Average(9,6,MODE_SMA,...) Weight [0...1.0]
aber ích möchte ja die Werte berechnen und kaufen und verkaufen wie ich möchte.
Kaufen wenn die hier aufgeführten Bedingungen zusammentreffen (Beispiel)
- Signal_1_MA steigt (( wie bekomme ich aus o.a. Signalen diesen Wert, z.B. Signal_1_MA[0]>Signal_1_MA[1] ))
- Signal_2_MA steigt (( wie bekomme ich aus o.a. Signalen diesen Wert, z.B. Signal_2_MA[0]>Signal_2_MA[1] ))
- Signal_3_MA um 0,05 größer als Signal_4_MA (( wie bekomme ich aus o.a. Signalen diesen Wert, z.B. Signal_4_MA[0]+0,05>Signal_3_MA[1] ))
und wie führe ich dann den handel aus, also nur kaufen wenn o.g. Bedingungen erfüllt sind.
Irgendwann werde ich das Handbuch lesen und dann selbst raus finden wie ich es programmieren muss.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ich möchte gerade einen eigenen EA zusammen bauen.
Kann mir vielleicht jemand den Grund-Code zusammenstellen für folgende Anforderungen?
Ich denke das sollte für jemand aus dem Forum ein Kinderspiel sein, aber ich bin noch ganz am Anfang. Und hierfür gleich am Anfang einen Experten zu beauftragen kann ich mir nicht leisten.
Modifizieren kann ich ihn dann schon. Aber ich weiß noch nicht wie ich die Werte bekomme und fallend/steigend/Differenzen berechnen sowie nur Buy oder Sell zulassen kann.
Wäre super.
EA in MQL5 für MT5
Signale
Signal_MA1 (Bsp.EMA50) mit Shiftfunktion (Verschiebung auf auf X-Achse)
Signal_MA2 (Bsp.EMA40) mit Shiftfunktion (Verschiebung auf auf X-Achse)
Signal_MA3 (Bsp.EMA20) mit Shiftfunktion (Verschiebung auf auf X-Achse)
Signal_MA4 (Bsp.SMA12) mit Shiftfunktion (Verschiebung auf auf X-Achse)
Signal_MA5 (Bsp.SMA6) mit Shiftfunktion (Verschiebung auf auf X-Achse)
Von mir im Programm dann einstellbar, gerne auch durch ausblenden/ändern im MQL5-Code:
Handel wenn