Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Isto é muito errado . . .
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
(BuyTicket || SellTicket) resultará em verdadeiro ou falso . . e, neste caso, verdadeiro ou falso será considerado como 1 ou 0 . . não o seu número de SellTicket ou BuyTicket . .
Stoploss = 40 . . . quando você usa um stoploss no OrderSend é um preço . . . não um número de pips, slippage é um número de pips . . leia a documentação: OrderSend
Ok, eu sei o que você quer dizer, então eu preciso de um comando para selecionar a ordem ao usar OrderSelect... ou OrderSelect, neste caso, está geralmente errado?
Leia os documentos . . . OrderSelect é necessário para selecionar o pedido antes que você possa usar o OrderLots, OrderTicket, OrderOpenPrice, etc, etc. "Nota: O pedido deve ser selecionado previamente pela funçãoOrderSelect()".
Se você não precisa usar uma informação referente a um pedido existente, você não precisa da OrderSelect. se você precisa ... bem, então você precisa.
Leia os documentos . . . OrderSelect é necessário para selecionar o pedido antes que você possa usar o OrderLots, OrderTicket, OrderOpenPrice, etc, etc. "Nota: O pedido deve ser selecionado previamente pela funçãoOrderSelect()".
Se você não precisa usar uma informação referente a um pedido existente, você não precisa da OrderSelect. se você precisa ... bem, então você precisa.
Atualmente eu acho que precisaria desta informação, porque se existe uma posição no mercado eu preciso fechá-la e substituí-la por outra. Pensei que a OrderSelect me ajudaria desta forma. Mas se a OrderSelect é apenas para ordens abertas e não para a posição ativa no mercado, não é útil. Estou certo?
Mas se OrderSelect não ajudar, como posso fechar as posições ativas?
comentários
Marc
nirvanamac:
Isto parece estar mais correto, mas agora eu preciso saber porque o programa só executa a ordem de venda @ 12 & 23... e não as ordens de compra...?
Provavelmente sim... e provavelmente gera um erro que você não está aprisionando...
Tente . . .
Seu pedidoFechar está errado . . você abre uma Buy at Ask, para fechar uma Buy you Sell . . você Vende na Bid, você abre uma Sell at Bid para fechar uma Sell you Buy . . você compra na Ask.
Seu pedidoFechar está errado . . você abre uma Buy at Ask, para fechar uma Buy you Sell . . você Vende na Bid, você abre uma Sell at Bid para fechar uma Sell you Buy . . você compra na Ask.
Muito obrigado por me ajudar...Eu modifiquei o código com suas dicas. Parece que é assim:
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#direitos de propriedade intelectual "Der Marc
#link de propriedade "Es gibt gar keine Internetseite"
//Wichtige Variablen
Minlot duplo externo=0,01;
Int. externo Dígitos2Round=2;
Intenção externa PercentOfFreeDepo=1;
int externo Slippage=5;
int externo MagicNumber =1;
extern int TradeHour3=3;
externo int TradeHour4=4;
externo int TradeHour7=7;
externo int TradeHour10=10;
externo int TradeHour17=17;
externo int TradeHour18=18;
externo int TradeHour20=20;
externo int TradeHour12=12;
externo int TradeHour23=23;
Exterior int StopLoss=400;
//Globale Variablen
int BuyTicket;
int SellTicket;
duplo UsePoint;
int UseSlippage; int UseSlippage;
int openbuy = 0;
int opensell = 0; int openbuy = 0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Símbolo());
UseSlippage = GetSlippage(Symbol(), Slippage);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
duplo FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0,0001)*0,1,Digits2Round);
//===================== Vamos determinar o tamanho e o risco do lote ===================================
se ( Lote<Minlot )
{
Lote=Minlot;
}
Comentário ("\n", "Risco aceitável é ",PercentOfFreeDepo, "% = ",Risco," do dinheiro livre ",FreeDepo," em lotes = ",Lote);
for(int i = OrdensTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderOpenTime()+3600) < TimeCurrent())
{
se (OrderType() == OP_BUY || OP_SELL)
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Vermelho);
openbuy = 0;
openbuy = 0; opensell = 0;
}
se (OrderType() == OP_SELL)
{
Fechado = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Vermelho);
opensell = 0;
openbuy = 0;
}
}
}
}
//BuyOrder
if ((TradeHour3===Hour())|||(TradeHour4===Hour())|||(TradeHour7==Hour())|||(TradeHour10==Hour())|||(TradeHour17===Hour())|||(TradeHour18===Hour())|||(TradeHour20=== Hour()) && openbuy == 0) //Signal Buy
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Ask - StopLoss * Point,0, "time trader buy order ",MagicNumber,0,Blue);
se (openbuy < 0) Print("OrderSend OP_BUY falhou, erro: ", GetLastError() );
}
// VendaOrdem
if ((TradeHour12==Hour())|||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0, "time trader sell order ",MagicNumber,0,Green);
if (opensell < 0) Print("OrderSend OP_SELL falhou, erro: ", GetLastError() );
}
//----
retorno(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
PipPoint duplo (moeda de corda)
{
int CalcDigits = MarketInfo(Moeda, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) CalcPoint duplo = 0,01;
caso contrário if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0,0001;
retorno (CalcPoint);
}
//Get Slippage Função
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Moeda, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) CalcSlippage duplo = SlippagePips;
caso contrário if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
retorno (CalcSlippage);
}
Ao executar o backtest há uma mensagem de erro ERR_INVALID_TICKET (4108).
Nem todas as ordens foram executadas
Será que o erro pertence ao fato de que o SL foi acionado antes?