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
Tenha cuidado ao usar OrderComment() para identificar o comércio. Algumas vezes o corretor adicionará caracteres ao comentário.
É melhor usar
if (StringFind(OrderComment(), UserComment, 0) > 0)
{
// pedido identificado pelo UserComment encontrado no OrderComment
}
em vez de
se (OrderComment() == UserComment)
{
// o pedido pode ser identificado pelo UserComment
// se o OrderComment não foi alterado pelo corretor
}
RobertExatamente ... E também, às vezes o comentário original codificado na EA é muito longo e será troncado pela plataforma (não sei se o resto do comentário está na "memória", mas não é exibido na coluna de comentários).
FerruFx
preciso de ajuda com minha EA
oi,
estou trabalhando em uma EA que abre posições longas e curtas simultaneamente e estou enfrentando este problema... quando ambos os tipos de posições estão abertas, digamos que a primeira é curta e a segunda é longa... a EA não fechará a posição longa se a curta ainda estiver aberta, esperará que a curta seja fechada e depois fechará a longa quando as condições forem cumpridas e vice-versa. herebelow é a parte da EA onde deve fechar as posições abertas:
//---- Fechar Posições Abertas
for(int cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS);
{
//-- Fechar Longo
if(OrderSymbol() == Symbol() && OrderType()==OP_BUY && rsi1>75 && rsi<75)
{
OrderClose(OrderTicket(),OrderLots(),Bid,5,Green);
LoteL=Lote;
}
//-- Fechar curto
if(OrderSymbol() == Symbol() && OrderType()==OP_SELL && rsi125)
{
OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
LoteS=Lote;
}
}
}
* onde rsi1 é o rsi anterior e rsi é a leitura atual
*LotL & LotS é um multiplicador do lote original, eu o configurei para abrir um máximo de 3 posições de cada lado, assim, ao fechar um tipo de posições abertas, LotL & LotS será redefinido para o tamanho original
a EA está trabalhando como previsto ao abrir posições, mas o problema é fechar posições abertas, eu acho que a EA na parte do loop não está lendo todas as posições abertas, mas apenas a primeira... qualquer ajuda para consertar isso é realmente apreciada!!
saúde!
pete
Estou tentando adicionar o recurso "Pips to activate Trailing stop" (Pips para ativar a Trailing stop). O que eu mudei está em vermelho. O que mais precisa ser adicionado?
extern string Remark1 = "== Main Settings ==";
extern int MagicNumber = 54321;
extern bool SignalMail = False;
extern bool EachTickMode = true;
extern double Lots = 4;
extern int Slippage = 2;
extern bool UseStopLoss = false;
extern int StopLoss = 100;
extern bool UseTakeProfit = false;
extern int TakeProfit = 15;
extern bool UseTrailingStop = true;
extern int TrailingStop = 45;
extern double Pips_Activate_TS = 5;
extern bool MoveStopOnce = False;
extern int MoveStopWhenPrice = 50;
extern int MoveStopTo = 1;
extern int MaxConcurrentTrades = 2;
//Version 2.01
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if(Open[0] > Open[0+1] &&
Open[0+1] >= Open[0+2] &&
Open[0+2]>= Open[0+3] &&
Open[0+3] >= Open[0+4] &&
Open[0+4] >= Open[0+5] &&
Open[0+5] >= Open[0+6]) Order = SIGNAL_SELL;
if(Open[0] < Open[0+1] &&
Open[0+1] <= Open[0+2] &&
Open[0+2]<= Open[0+3] &&
Open[0+3] <= Open[0+4] &&
Open[0+4] <= Open[0+5] &&
Open[0+5] <= Open[0+6]) Order = SIGNAL_BUY;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(DecideToOpenTrade(OP_BUY) && TradeSlotsAvailable()) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(DecideToOpenTrade(OP_SELL) && TradeSlotsAvailable()) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
Olá colegas comerciantes,
Tenho este pequeno problema desenvolvendo um Expert Advisor a partir de um indicador personalizado, tentei a função "iCustom", mas meu indicador sempre retorna o mesmo valor.
Ele retorna algo como 21473..., assim
Quero que a EA seja capaz de reconhecer quando os sinais de venda e compra são gerados e deve realizar a ação comercial correspondente (ou seja, comprar quando o indicador diz para cima e vender quando diz para baixo)
Aqui está o código do indicador que eu apreciaria muito se alguém pudesse encontrar uma solução o mais rápido possível.Favor publicar também as linhas de código com sua função iCustom()
FerruFx
Desculpe, isto é tudo o que eu tenho...
Rsi Ea
Este é o meu primeiro EA. Ela usa 2 rsi's em 3 períodos de tempo. Eu tenho um problema com a ea tomando ofícios contra as cruzes. Comprar quando é suposto vender, vender quando é suposto comprar. Alguém poderia, por favor, olhar para o código e me dizer onde errei. Eu não consegui ver nada de errado.
Anexei a ea e uma foto do problema.
Precisa de ajuda para o código EA!
Olá a todos,
Como você sabe que o mercado fx é de 24 horas, não me sinto confortável para negociar durante a noite sem sentar na frente do PC. Portanto, estou pensando que a melhor maneira é programar para proteger o comércio se o preço se mover em direção à minha direção favorita. Por exemplo, se eu abrir 5 lotes no total, quando o lucro estiver acima de 50 pips, ele automaticamente pára o prejuízo para quebrar o equilíbrio. Quando o lucro está acima de 100 pips, ele se move para proteger 30 pips. Quando o lucro está acima de 200 pips, ele se move para proteger 50 pips. e assim por diante.
Eu tentei codificar meu eu mesmo. Mas não funciona quando o arrasto para o meu gráfico e o ponho a negociar ao vivo. Qualquer corpo poderia me ajudar a dar uma olhada no meu código e consertá-lo? Muito obrigado.
#direitos autorais de propriedade "x li".
#link de propriedade ""
#property show_confirmar
//---- parâmetros de entrada
alvo int externo1 =50;
alvo int externo2 =100;
alvo int externo3 =150;
alvo int externo4 =200;
alvo externo int5 =300;
proteção int externa1 =0;
proteção int externa2 =5;
proteção int externa3 =50;
proteção int externa4 =100;
//+-----------------------------------------------------------------------------+
//| script "move stoploss to protect(50->0;100->5;150->50;200->50;300->100)" |
//+-----------------------------------------------------------------------------+
int start()
{
resultado da bool;
parada_dupla perda,ponto,preço de entrada,lucro;
int cmd,total,erro,i;
//----
total=OrdensTotal();
point=MarketInfo(Symbol(),MODE_POINT);
//----
para(i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
cmd=OrderType();
Preço de Entrada=Preço de EncomendaOpenPrice();
//---- ordens de compra são consideradas
if(cmd==OP_BUY)
{
lucro=Licitado-Preço de entrada;
if(lucro>alvo1*ponto && lucro<alvo2*ponto)
{
stop_loss=EntryPrice+protect1*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo2*ponto && lucro<ponto3*ponto)
{
stop_loss=EntryPrice+protect2*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo3*ponto && lucro<ponto4*ponto)
{
stop_loss=EntryPrice+protect3*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo4*ponto && lucro<ponto 5*ponto)
{
stop_loss=EntryPrice+protect3*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo5*ponto)
{
stop_loss=EntryPrice+protect4*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
}
//---- ordens de venda são consideradas
if(cmd==OP_SELL)
{
profit=EntryPrice-Ask;
if(lucro>alvo1* ponto && lucro<alvo2* ponto)
{
stop_loss=Entry Price-protect1*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo2*ponto && lucro<ponto3*ponto)
{
stop_loss=Proteção de preço de entrada2*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo3*ponto && lucro<ponto4*ponto)
{
stop_loss=Entry Price-protect3*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo4*ponto && lucro<ponto 5*ponto)
{
stop_loss=Entry Price-protect3*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
if(lucro>alvo5*ponto)
{
stop_loss=Entry Price-protect4*point;
resultado=OrderModify(OrderTicket(),0,stop_loss,0,0,CLR_NONE);
}
}
}
senão { Imprimir( "Erro ao selecionar o pedido", GetLastError()); quebrar; }
}
//----
retorno(0);
}
//+------------------------------------------------------------------+
Rsi Ea
Não vejo porque você usa a mesma variável para abrir e fechar negócios, mas ela pode funcionar.
Este pode ser o problema:
"Ordem" é uma variável global. Portanto, ao final de cada execução através da função Iniciar, ela será definida para o último valor que lhe foi atribuído e usará esse valor para o início da próxima execução. Se você a fizer local (movê-la para dentro da função Start), ela poderá consertá-la. Caso contrário, você terá que redefini-lo após o último uso dele.
Boa caçada,
Grande Seja