Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 712
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Mehrere EAs müssen in verschiedenen Fenstern mit demselben Instrument arbeiten.
Können wir irgendwie erreichen, dass PositionsTotal() nur unsere eigenen Positionen zählt? Sobald aber ein EA eine Position eröffnet, gehen auch die anderen davon aus, dass sie bereits in Position sind.
Ich habe verschiedene MagicNumbers eingestellt, es hilft nicht.
Mehrere EAs müssen in verschiedenen Fenstern mit demselben Instrument arbeiten.
Können wir irgendwie erreichen, dass PositionsTotal() nur unsere eigenen Positionen zählt? Sobald aber ein EA eine Position eröffnet, gehen auch die anderen davon aus, dass sie bereits in Position sind.
Ich habe verschiedene MagicNumbers eingestellt, es hilft nicht.
Es gibt keine Wunder. Wenn die Magier unterschiedlich sind, sollten die Expert Advisors die Positionen unterscheiden. Wird es einen Code geben?
Die erste (eine Testversion, nur für ein gemeinsames Experiment):
CTrade trade;
int OnInit()
{
trade.SetAsyncMode(true);
trade.SetExpertMagicNumber(111);
return(INIT_SUCCEEDED);
}
void OnTick()
{
if (PositionsTotal()==0)
{
trade.Buy(1);
}
}
Die zweite (dieselbe, mit einem anderen Magier):
CTrade trade;
int OnInit()
{
trade.SetAsyncMode(true);
trade.SetExpertMagicNumber(222);
return(INIT_SUCCEEDED);
}
void OnTick()
{
if (PositionsTotal()==0)
{
trade.Buy(1);
}
}
Sobald ich eine Position manuell schließe, sehen die EAs dies sofort und eröffnen neue Positionen - gleichzeitig. Wenn eine geöffnet ist, während die andere nicht aktiv ist, wird die zweite nicht geöffnet.
Mehrere EAs müssen in verschiedenen Fenstern mit demselben Instrument arbeiten.
Können wir irgendwie erreichen, dass PositionsTotal() nur unsere eigenen Positionen zählt? Sobald aber ein EA eine Position eröffnet, gehen auch die anderen davon aus, dass sie bereits in Position sind.
Ich habe verschiedene MagicNumbers eingestellt, aber das hilft nicht.
Beispiel EA, der alle Positionen durchläuft und nur sein eigenes Symbol und dessen Magic schließt:
//| CloseALL.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade m_trade; // trading object
CPositionInfo m_position; // trade position object
//--- input parameter
input ulong m_magic=159753698; // magic number
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
CloseAll();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Close All |
//+------------------------------------------------------------------+
void CloseAll()
{
Print(__FUNCTION__);
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i))
if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
m_trade.PositionClose(m_position.Ticket());
}
//+------------------------------------------------------------------+
Hinzugefügt: Ich hoffe, Sie arbeiten an einem Hedge-Trading-Konto???
Und sobald ich eine Position manuell schließe, eröffnen die Expert Advisors sofort eine neue.
Und natürlich unterscheidetPositionsTotal die Positionen nicht nach magischer Zahl oder sonstigem, sondern gibt die Gesamtzahl der Positionen im Konto an. Wir sollten eine Schleife durch die Positionen von 0 bisPositionsTotal()-1 ziehen, die magische Zahl betrachten und zählen.
Oh, während ich geschrieben habe, haben sie mir schon genau gezeigt, wie man das macht (:Mehrere EAs müssen in verschiedenen Fenstern mit demselben Instrument arbeiten.
Können wir irgendwie erreichen, dass PositionsTotal() nur unsere eigenen Positionen zählt? Sobald aber ein EA eine Position eröffnet, gehen auch die anderen davon aus, dass sie bereits in Position sind.
Ich habe verschiedene MagicNumbers eingestellt, es hilft nicht.
Добавлено: я надеюсь Вы работает на торговом счетё hedge???
Nein, nicht Hedge. PositionTotal() kann also nicht nur seine eigenen Positionen zählen?
Kann die CTrade-Klasse dann ihre eigenen Positionen getrennt von anderen betrachten?
Nein, nicht Hedge. PositionTotal() kann also nicht nur seine eigenen Positionen zählen?
Und die CTrade-Klasse kann ihre Positionen getrennt betrachten?
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Magische Zahl
Wladimir Karputow, 2016.12.25 12:38
Beim Netting erfährt es der Letzte - d.h. die magische Zahl der Position wird die gleiche sein wie beim letzten Handel mit diesem Instrument...
Prüfen:
//| ReplacementMagic.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#property description "Что происходит с magic на netting"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
CPositionInfo m_position; // trade position object
CTrade m_trade; // trading object
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
if(AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
{
Print("Этот пример только для netting!");
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
static int counter=-10;
if(counter%300==0)
{
//--- генерируем Magic
ulong m_magic=MathRand();
Print("new Magic: ",IntegerToString(m_magic));
//--- устанавливаем новый Magic
m_trade.SetExpertMagicNumber(m_magic);
//--- определим лот
double lots=0.0;
if(MathRand()%2==0)
lots=0.01;
else
lots=0.02;
//--- определяем, что открывать: Buy или Sell
if(MathRand()%2==0) // значит Buy
{
m_trade.Buy(lots);
}
else // значит Sell
{
m_trade.Sell(lots);
}
}
counter++;
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//--- get transaction type as enumeration value
ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
if(type==TRADE_TRANSACTION_DEAL_ADD)
{
for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
if(m_position.SelectByIndex(i))
if(m_position.Symbol()==Symbol())
{
//string text=ChartGetString(0,CHART_COMMENT)+"\n"+
// "Magic: "+IntegerToString(m_position.Magic());
//Comment(text);
Print("Обнаружена позиция с Magic: "+IntegerToString(m_position.Magic()));
}
}
}
//+------------------------------------------------------------------+