Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
Wie implementiert man die Positionskontrolle in MetaTrader 5? Ich möchte nur eine offene Position auf einem Balken haben, d.h. die Position soll geschlossen werden, egal wo - auf welchem Balken, aber die Eröffnung soll nur auf einem Balken erfolgen.
Dieser Code wird völlig ignoriert. Wo liegt der Fehler?
if (OrderSelect(HistoryDealsTotal()-1))
{
datetime Cu=PositionsTotal();
int hd=iBarShift(Symbol(),_Period,Cu);
if (hd<=1)
{
return;
}
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Wie implementiert man die Positionskontrolle in MetaTrader 5? Das bedeutet, dass die Position geschlossen wird, egal wo - auf welchem Balken, aber die Eröffnung sollte nur auf einem Balken erfolgen.
Am einfachsten ist es, den Zeitpunkt der Bareröffnung, zu dem die Position eröffnet wird, in der globalen Variable zu speichern und dann bei der Eröffnung einer neuen Position den Zeitpunkt der Bareröffnung zu überprüfen, wenn der Wert höher ist als der gespeicherte Wert, und dann eine Position zu eröffnen.
Wie implementiert man die Positionskontrolle in MetaTrader 5? Ich möchte nur eine offene Position auf einem Balken haben, d.h. die Position soll geschlossen werden, egal wo - auf welchem Balken, aber die Eröffnung soll nur auf einem Balken erfolgen.
Dieser Code wird völlig ignoriert. Wo liegt der Fehler?
Fehler: Sie haben die Fliegen und die Koteletts verwechselt - Sie haben die FERNBESTELLUNGEN und die POSITIONEN verwechselt.
Die obige einfache Methode besteht darin, sich die Eröffnungszeit des aktuellen Balkens zu merken, wenn Sie eine Position eröffnen. Wenn Sie dann eine neue Position eröffnen wollen, prüfen Sie die gespeicherte Zeit und die Eröffnungszeit des aktuellen Balkens.
Die Speicherung des Zeitpunkts der Positionseröffnung ist inOnTradeTransaction praktisch:
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealSelect(trans.deal))
m_deal.Ticket(trans.deal);
elsereturn;
if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
{
if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
{
if(m_deal.Entry()==DEAL_ENTRY_IN || m_deal.Entry()==DEAL_ENTRY_INOUT)
m_last_deal_in=iTime(m_symbol.Name(),InpTimeFrame,0);int size_need_position=ArraySize(SPosition);
if(size_need_position>0)
{
for(int i=0; i<size_need_position; i++)
{
if(SPosition[i].waiting_transaction)
if(SPosition[i].waiting_order_ticket==m_deal.Order())
{
Print(__FUNCTION__," Transaction confirmed");
SPosition[i].transaction_confirmed=true;
break;
}
}
}
}
}
}
}
und stimmen den Zeitpunkt der Auslösung des Signals ab:
//+------------------------------------------------------------------+//| Search trading signals |//+------------------------------------------------------------------+bool SearchTradingSignals(void)
{
if(m_prev_bars==m_last_deal_in) // on one bar - only one dealreturn(true);
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
Irgendwie ist das ein bisschen trickreich..... Kein Problem in der ersten Phase "Erinnern Sie sich an die Öffnungszeit der aktuellen Bar".
Das war's:
if (PositionsTotal()==1) // Здесь проверяю, что открыта одна позиция
{
datetime Cu=iTime(NULL,_Period,0); // Здесь в переменную - время открытия бара при открытой позиции
Aber hier " bringen Sie die gespeicherte Zeit und die Öffnungszeit des aktuellen Taktes in Einklang".
Ich habe ungefähr das Gleiche getan. Sehen Sie sich das an:
if (PositionsTotal()==1) // Здесь проверяю, что открыта одна позиция (или была открыта, неважно, любое торговое действие)
{
datetime Cu=iTime(NULL,_Period,0); // Здесь в переменную - время открытия бара при открытой позицииint hd=+iBarShift(Symbol(),_Period,Cu)+1; // Здесь в переменную - бар на котором произошло открытие позиции if (hd>=1) //Здесь проверяем - если этих баров, больше чем один, то.......
{
return; //....то зацикливанием программу, НО проблема только в return
}
}
Alles, was ich hier tun muss, ist eine Schleife wie "return(-1)", aber ich kann der Rückgabe wegen der Leere keinen Ausdruck zuweisen. Wie kann ich das umgehen? Wie kann man eine Schleife machen, aber nicht zurückkehren?
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
datetime PR=iTime(NULL,_Period,0); // проверяю время открытие бараif (PositionsTotal()==1)
{
datetime TK=iTime(NULL,_Period,0); // время открытия бара при открытой позиции if (PR==TK) // сравниваю
{
return(true); // НЕ катит true - ошибка
}
}
Irgendwie ist das ein bisschen trickreich..... Kein Problem in der ersten Phase "Erinnern Sie sich an die Öffnungszeit der aktuellen Bar".
Das war's:
Aber hier " überprüfen Sie die gespeicherte Zeit und die Öffnungszeit des aktuellen Balkens" Problem.
Ich habe ungefähr das Gleiche getan. Sehen Sie sich das an:
Alles, was ich hier tun muss, ist eine Schleife wie "return(-1)", aber ich kann der Rückgabe wegen der Leere keinen Ausdruck zuweisen. Wie kann ich das umgehen? Wie kann man eine Schleife machen, aber nicht zurückkehren?
Die Behandlung für Looping-Programme besteht darin, ihnen die Arme um den Hals zu schneiden. Damit Sie es in Zukunft nicht wieder tun müssen.
Hier ist, was Sie brauchen - das ganze Programm Körper, müssen Sie nur zu formalisieren Signalempfang:
//+------------------------------------------------------------------+//| Example One position on one bar.mq5 |//| 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"//---#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CPositionInfo m_position; // object of CPositionInfo class
CTrade m_trade; // object of CTrade class
CSymbolInfo m_symbol; // object of CSymbolInfo class
CDealInfo m_deal; // object of CDealInfo class//--- input parametersinputulong InpMagic = 200; // Magic number//---datetime m_prev_bars = 0; // "0" -> D'1970.01.01 00:00';datetime m_last_deal_in = 0; // "0" -> D'1970.01.01 00:00';//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(!m_symbol.Name(Symbol())) // sets symbol name
{
Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
return(INIT_FAILED);
}
RefreshRates();
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- we work only at the time of the birth of new bardatetime time_0=iTime(m_symbol.Name(),Period(),0);
if(time_0==m_prev_bars)
return;
m_prev_bars=time_0;
if(!RefreshRates())
{
m_prev_bars=0;
return;
}
//--- search for trading signalsif(!SearchTradingSignals())
{
m_prev_bars=0;
return;
}
}
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealSelect(trans.deal))
m_deal.Ticket(trans.deal);
elsereturn;
if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
{
if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
{
if(m_deal.Entry()==DEAL_ENTRY_IN || m_deal.Entry()==DEAL_ENTRY_INOUT)
m_last_deal_in=iTime(m_symbol.Name(),Period(),0);
}
}
}
}
//+------------------------------------------------------------------+//| Search trading signals |//+------------------------------------------------------------------+bool SearchTradingSignals(void)
{
if(m_prev_bars==m_last_deal_in) // on one bar - only one dealreturn(true);
//--- signal//---return(false);
}
//+------------------------------------------------------------------+//| Refreshes the symbol quotes data |//+------------------------------------------------------------------+bool RefreshRates()
{
//--- refresh ratesif(!m_symbol.RefreshRates())
{
Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
return(false);
}
//--- protection against the return value of "zero"if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
{
Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
return(false);
}
//---return(true);
}
//+------------------------------------------------------------------+
Die Variable"m_prev_bars" speichert die Eröffnungszeit des aktuellen Balkens und die Variable"m_last_deal_in" speichert die Eröffnungszeit des Balkens, zu dem die Position eröffnet wurde.
Diese beiden Variablen werden im Block zum Abrufen von Signalen"SearchTradingSignals" verglichen.
Für alle. Genauer gesagt wird im Diagrammfenster die in der Einstellung angegebene Anzahl von Balken angezeigt, die nicht vom Zeitrahmen abhängt.
P.S. Ich habe diesen Wert nie geändert, aber ich habe ihn gerade überprüft und gesehen, dass er nicht kleiner als 1000 eingestellt werden kann.Sie müssen also mitiBars() prüfen?
Guten Tag. Das Skript funktioniert aus irgendeinem Grund nicht.
Wo liegt das Problem?
Hallo Freunde!
Fragen:
1. Werden Sell Stop Limit-Orders auf der Maklerseite oder auf der Terminalseite platziert?
2. Wenn ich das Programm schließe, wird dann dieser Auftrag ausgelöst, wenn die Bedingungen erfüllt sind?
Handel an der MICEX-Aktienbörse. Vielen Dank im Voraus!
Guten Tag, liebe Programmierer. Frage zu MQL5
Wie implementiert man die Positionskontrolle in MetaTrader 5? Ich möchte nur eine offene Position auf einem Balken haben, d.h. die Position soll geschlossen werden, egal wo - auf welchem Balken, aber die Eröffnung soll nur auf einem Balken erfolgen.
Dieser Code wird völlig ignoriert. Wo liegt der Fehler?
Guten Tag, liebe Programmierer. Frage zu MQL5
Wie implementiert man die Positionskontrolle in MetaTrader 5? Das bedeutet, dass die Position geschlossen wird, egal wo - auf welchem Balken, aber die Eröffnung sollte nur auf einem Balken erfolgen.
Am einfachsten ist es, den Zeitpunkt der Bareröffnung, zu dem die Position eröffnet wird, in der globalen Variable zu speichern und dann bei der Eröffnung einer neuen Position den Zeitpunkt der Bareröffnung zu überprüfen, wenn der Wert höher ist als der gespeicherte Wert, und dann eine Position zu eröffnen.
Guten Tag, liebe Programmierer. Frage zu MQL5
Wie implementiert man die Positionskontrolle in MetaTrader 5? Ich möchte nur eine offene Position auf einem Balken haben, d.h. die Position soll geschlossen werden, egal wo - auf welchem Balken, aber die Eröffnung soll nur auf einem Balken erfolgen.
Dieser Code wird völlig ignoriert. Wo liegt der Fehler?
Fehler: Sie haben die Fliegen und die Koteletts verwechselt - Sie haben die FERNBESTELLUNGEN und die POSITIONEN verwechselt.
Um Verwirrung zu vermeiden, lesen Sie bitte die Referenz:Allgemeine Grundsätze
Die obige einfache Methode besteht darin, sich die Eröffnungszeit des aktuellen Balkens zu merken, wenn Sie eine Position eröffnen. Wenn Sie dann eine neue Position eröffnen wollen, prüfen Sie die gespeicherte Zeit und die Eröffnungszeit des aktuellen Balkens.
Die Speicherung des Zeitpunkts der Positionseröffnung ist inOnTradeTransaction praktisch:
und stimmen den Zeitpunkt der Auslösung des Signals ab:
Beispiel aus dem Code vonOHLC Check 2
Irgendwie ist das ein bisschen trickreich..... Kein Problem in der ersten Phase "Erinnern Sie sich an die Öffnungszeit der aktuellen Bar".
Das war's:
Aber hier " bringen Sie die gespeicherte Zeit und die Öffnungszeit des aktuellen Taktes in Einklang".
Ich habe ungefähr das Gleiche getan. Sehen Sie sich das an:
Alles, was ich hier tun muss, ist eine Schleife wie "return(-1)", aber ich kann der Rückgabe wegen der Leere keinen Ausdruck zuweisen. Wie kann ich das umgehen? Wie kann man eine Schleife machen, aber nicht zurückkehren?
Das hat auch nicht funktioniert.
Irgendwie ist das ein bisschen trickreich..... Kein Problem in der ersten Phase "Erinnern Sie sich an die Öffnungszeit der aktuellen Bar".
Das war's:
Aber hier " überprüfen Sie die gespeicherte Zeit und die Öffnungszeit des aktuellen Balkens" Problem.
Ich habe ungefähr das Gleiche getan. Sehen Sie sich das an:
Alles, was ich hier tun muss, ist eine Schleife wie "return(-1)", aber ich kann der Rückgabe wegen der Leere keinen Ausdruck zuweisen. Wie kann ich das umgehen? Wie kann man eine Schleife machen, aber nicht zurückkehren?
Die Behandlung für Looping-Programme besteht darin, ihnen die Arme um den Hals zu schneiden. Damit Sie es in Zukunft nicht wieder tun müssen.
Hier ist, was Sie brauchen - das ganze Programm Körper, müssen Sie nur zu formalisieren Signalempfang:
Die Variable"m_prev_bars" speichert die Eröffnungszeit des aktuellen Balkens und die Variable"m_last_deal_in" speichert die Eröffnungszeit des Balkens, zu dem die Position eröffnet wurde.
Diese beiden Variablen werden im Block zum Abrufen von Signalen"SearchTradingSignals" verglichen.