Акция — это ценная бумага, которая выпускается каким-либо предприятием (акционерным обществом) и дает ее владельцу права на получение части прибыли от этого предприятия в виде дивидендов. Также
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? Quero ter apenas uma posição aberta num bar, ou seja, a posição deve ser fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
Este código é completamente ignorado. Qual é o erro?
if (OrderSelect(HistoryDealsTotal()-1))
{
datetime Cu=PositionsTotal();
int hd=iBarShift(Symbol(),_Period,Cu);
if (hd<=1)
{
return;
}
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? De modo a que num bar haja apenas uma posição aberta, o que significa que a posição é fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
A maneira mais fácil é poupar o tempo de abertura do bar, em que a posição é aberta na variável global e depois, ao abrir uma nova posição, verificar o tempo de abertura do bar se o valor é superior ao valor guardado, e depois abrir uma posição.
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? Quero ter apenas uma posição aberta num bar, ou seja, a posição deve ser fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
Este código é completamente ignorado. Qual é o erro?
Erro: Misturou as moscas e as costeletas - misturou as PEDIDAS REMOTADAS e as POSIÇÕES.
A forma simples acima é recordar o tempo de abertura do bar actual quando se abre uma posição. Depois, se quiser abrir uma nova posição, verifica o tempo poupado e o tempo de abertura do bar actual.
Guardar o tempo de abertura de uma posição é conveniente naOnTradeTransaction:
//+------------------------------------------------------------------+//| 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;
}
}
}
}
}
}
}
e reconciliar o tempo em que o sinal é desencadeado:
//+------------------------------------------------------------------+//| Search trading signals |//+------------------------------------------------------------------+bool SearchTradingSignals(void)
{
if(m_prev_bars==m_last_deal_in) // on one bar - only one dealreturn(true);
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
É um pouco complicado.... de alguma forma. Sem problemas na primeira fase "lembrar a hora de abertura do bar actual".
Aí está:
if (PositionsTotal()==1) // Здесь проверяю, что открыта одна позиция
{
datetime Cu=iTime(NULL,_Period,0); // Здесь в переменную - время открытия бара при открытой позиции
Mas aqui " verifica o tempo poupado e a hora de abertura do bar actual" problema.
Fiz mais ou menos a mesma coisa. Olha para isto:
if (PositionsTotal()==1) // Здесь проверяю, что открыта одна позиция (или была открыта, неважно, любое торговое действие)
{
datetime Cu=iTime(NULL,_Period,0); // Здесь в переменную - время открытия бара при открытой позицииint hd=+iBarShift(Symbol(),_Period,Cu)+1; // Здесь в переменную - бар на котором произошло открытие позиции if (hd>=1) //Здесь проверяем - если этих баров, больше чем один, то.......
{
return; //....то зацикливанием программу, НО проблема только в return
}
}
Tudo o que preciso de fazer aqui é dar uma volta como "retorno(-1)", mas não posso atribuir uma expressão ao retorno por causa do vazio. Como contornar isto? Como fazer loop mas não regressar?
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
datetime PR=iTime(NULL,_Period,0); // проверяю время открытие бараif (PositionsTotal()==1)
{
datetime TK=iTime(NULL,_Period,0); // время открытия бара при открытой позиции if (PR==TK) // сравниваю
{
return(true); // НЕ катит true - ошибка
}
}
É um pouco complicado.... de alguma forma. Sem problemas na primeira fase "lembrar a hora de abertura do bar actual".
Aí está:
Mas aqui " concilia-se o tempo poupado e o tempo de abertura do bar actual".
Fiz mais ou menos a mesma coisa. Olha para isto:
Tudo o que preciso de fazer aqui é dar uma volta como "retorno(-1)", mas não posso atribuir uma expressão ao retorno por causa do vazio. Como contornar isto? Como fazer loop mas não regressar?
O tratamento para programas de looping está a cortar-lhes os braços à volta do pescoço. Para que não tenha de o fazer novamente no futuro.
Aqui está o que precisa - todo o corpo do programa, só precisa de formalizar a recepção do sinal:
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
A variável'm_prev_bars' armazena o tempo de abertura do bar actual e a variável'm_last_deal_in' armazena o tempo de abertura do bar em que a posição foi aberta.
Estas duas variáveis são comparadas no bloco para obter sinais'SearchTradingSignals'.
Para todos. Mais precisamente, exibe na janela do gráfico o número de barras especificadas na configuração, e não depende do período de tempo
P.S. Nunca mudei este valor, mas acabei de o verificar e vi que não pode ser fixado em menos de 1000.Portanto, precisa de verificar comiBars()?
Boa tarde. O guião não está a funcionar por alguma razão.
Qual é o problema?
Olá amigos!
Perguntas:
1. As ordens Sell Stop Limit são colocadas no lado do corretor ou no lado do terminal?
2. Quando eu encerrar o programa, será esta ordem accionada quando as condições forem cumpridas?
Negociação no mercado de acções MICEX. Obrigado de antemão!
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? Quero ter apenas uma posição aberta num bar, ou seja, a posição deve ser fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
Este código é completamente ignorado. Qual é o erro?
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? De modo a que num bar haja apenas uma posição aberta, o que significa que a posição é fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
A maneira mais fácil é poupar o tempo de abertura do bar, em que a posição é aberta na variável global e depois, ao abrir uma nova posição, verificar o tempo de abertura do bar se o valor é superior ao valor guardado, e depois abrir uma posição.
Boa tarde, caros programadores. Pergunta sobre MQL5
Como implementar o controlo de posição no MetaTrader 5? Quero ter apenas uma posição aberta num bar, ou seja, a posição deve ser fechada independentemente de onde - em que bar, mas a abertura deve ser num só bar.
Este código é completamente ignorado. Qual é o erro?
Erro: Misturou as moscas e as costeletas - misturou as PEDIDAS REMOTADAS e as POSIÇÕES.
Para evitar confusão, por favor leia a referência:Princípios Gerais
A forma simples acima é recordar o tempo de abertura do bar actual quando se abre uma posição. Depois, se quiser abrir uma nova posição, verifica o tempo poupado e o tempo de abertura do bar actual.
Guardar o tempo de abertura de uma posição é conveniente naOnTradeTransaction:
e reconciliar o tempo em que o sinal é desencadeado:
Exemplo retirado do códigoOHLC Check 2
É um pouco complicado.... de alguma forma. Sem problemas na primeira fase "lembrar a hora de abertura do bar actual".
Aí está:
Mas aqui " verifica o tempo poupado e a hora de abertura do bar actual" problema.
Fiz mais ou menos a mesma coisa. Olha para isto:
Tudo o que preciso de fazer aqui é dar uma volta como "retorno(-1)", mas não posso atribuir uma expressão ao retorno por causa do vazio. Como contornar isto? Como fazer loop mas não regressar?
Isso também não funcionou.
É um pouco complicado.... de alguma forma. Sem problemas na primeira fase "lembrar a hora de abertura do bar actual".
Aí está:
Mas aqui " concilia-se o tempo poupado e o tempo de abertura do bar actual".
Fiz mais ou menos a mesma coisa. Olha para isto:
Tudo o que preciso de fazer aqui é dar uma volta como "retorno(-1)", mas não posso atribuir uma expressão ao retorno por causa do vazio. Como contornar isto? Como fazer loop mas não regressar?
O tratamento para programas de looping está a cortar-lhes os braços à volta do pescoço. Para que não tenha de o fazer novamente no futuro.
Aqui está o que precisa - todo o corpo do programa, só precisa de formalizar a recepção do sinal:
A variável'm_prev_bars' armazena o tempo de abertura do bar actual e a variável'm_last_deal_in' armazena o tempo de abertura do bar em que a posição foi aberta.
Estas duas variáveis são comparadas no bloco para obter sinais'SearchTradingSignals'.