Como codificar? - página 145

 

Olá Roger09,

Mais uma vez obrigado por sua ajuda. Meu objetivo é usar um script para mover minha parada de perda para quebrar o limiar de mais x pips em um comércio de compra ou quebrar o limiar de menos x pips em um comércio de venda. Eu estabeleço uma chave quente para o roteiro para que eu possa rapidamente obter algum lucro quando a troca se mover em meu favor. Sei que alguns ES'a têm este recurso, mas prefiro usar um script para que eu possa fazê-lo manualmente.

 

Progrmming un stop buy and stop sell

Olá,

Eu sou um EA com CCI.

Meu programa fez uma compra quando a barra anterior ultrapassou a CCI>100, mas eu quero comprar 5 pips mais alto que a última barra.

Eu quero o mesmo com a ordem de parada de venda (5 pips abaixo do último mínimo).

Aqui meu EA, você pode me ajudar

Obrigado

/+------------------------------------------------------------------+

//| Este MQL é gerado pelo Expert Advisor Builder |

//| Expert Advisor Builder for MetaTrader 4 |

//| |

/+------------------- NÃO REMOVA ESTE CABEÇALHO --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#propriedade copyright "Expert Advisor Builder"

#link da propriedade "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

número interno externo MagicNumber = 0;

sinal externo boolMail = Falso;

bool externo EachTickMode = Falso;

double Lots externo = 1.0;

Exterior int Slippage = 30;

bool externo UseStopLoss = Verdadeiro;

StopLoss int externo = 200;

bool UseTakeProfit externo = Verdadeiro;

extern int TakeProfit = 600;

extern bool UseTrailingStop = Verdadeiro; extern bool UseTakeProfit = Verdadeiro;

Exterior int TrailingStop = 250;

int BarCount;

int Current;

bool TickCheck = Falso;

//+------------------------------------------------------------------+

//| função de iniciação de especialista |

//+------------------------------------------------------------------+

int init() {

BarCount = Barras;

se (CadaTickMode) Corrente = 0; caso contrário Corrente = 1;

retorno(0);

}

//+------------------------------------------------------------------+

//| função de desinicialização especializada |

//+------------------------------------------------------------------+

int deinit() {

retorno(0);

}

//+------------------------------------------------------------------+

//| função de início especializado |

//+------------------------------------------------------------------+

int start() {

int Ordem = SIGNAL_NONE;

int Total, Bilhete;

nível duplo StopLossLevel, TakeProfitLevel;

if (CadaTickMode && Bars != BarCount) TickCheck = False;

Total = EncomendasTotal();

Order = SIGNAL_NONE;

//+------------------------------------------------------------------+

//| Início variável |

//+------------------------------------------------------------------+

duplo Var1 = iCCI(NULL, 0, 20, PRICE_CLOSE, Atual + 0);

duplo Var2 = iCCI(NULL, 0, 20, PRICE_CLOSE, Corrente + 1);

duplo Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Corrente + 0);

dupla Compra1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Corrente + 1);

dupla Compra2_1 = Var1 ;

duplo Buy2_2 = 100;

duplo Buy3_1 = Var2 ;

dupla Compra3_2 = 100;

duplo Venda1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Atual + 0);

duplo Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Corrente + 1);

duplo Sell2_1 = Var1 ;

duplo Sell2_2 = - 100;

duplo Sell3_1 = Var2 ;

duplo Sell3_2 = - 100;

//+------------------------------------------------------------------+

//| Fim variável |

//+------------------------------------------------------------------+

//Cheque posição

bool IsTrade = Falso;

para (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = Verdadeiro;

if(OrderType() == OP_BUY) {

//Close

//+------------------------------------------------------------------+

//| Início do Sinal (Compra de Saída) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Fim do sinal (Compra de Saída) |

//+------------------------------------------------------------------+

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");

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Ponto * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

{} else {

//Close

//+------------------------------------------------------------------+

//| Início do Sinal (Sair de Venda) |

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Fim do sinal (Sair de Venda) |

//+------------------------------------------------------------------+

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");

se (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuar;

}

// Parada de trilha

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Ponto * TrailingStop)) {

if((OrderStopLoss() > (Pergunte + Ponto * TrailingStop)) ||| (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

se (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Início do sinal (Entrada) |

//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 && Buy3_1 <= Buy3_2) Pedido = SIGNAL_BUY;

if (Vender1_1 < Vender1_2 && Vender2_1 Vender3_2) Encomendar = SINAL_SELL;

//+------------------------------------------------------------------+

//| Fim do sinal |

//+------------------------------------------------------------------+

//Compra

if (Order === SIGNAL_BUY && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (UseStopLoss) StopLossLevel = Perguntar - StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (UseTakeProfitLevel) TakeProfitLevel = Ask + TakeProfitLevel * Ponto; caso contrário 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)) {

Imprimir("Pedido de compra aberto : ", Preço Aberto());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Imprimir("Erro na abertura do pedido de compra : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

//vender

if (Order === SIGNAL_SELL && ((EachTickMode && !TickCheck) ||| (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Cheque margem livre

if (AccountFreeMargin() < (1000 * Lotes)) {

Imprimir("Nós não temos dinheiro. Margem Livre = ", AccountFreeMargin());

devolução(0);

}

se (UseStopLoss) StopLossLevel = Bid + StopLoss * Ponto; caso contrário, StopLossLevel = 0,0;

if (UseTakeProfitLevel) TakeProfitLevel = Bid - TakeProfit * Ponto; caso contrário TakeProfitLevel = 0,0;

Ticket = OrderSend(Symbol(), OP_SELLL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Imprimir("ordem de venda aberta : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Imprimir("Erro na abertura do pedido de VENDA : ", GetLastError());

}

}

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

return(0);

}

}

se (!EachTickMode) BarCount = Bars;

retorno(0);

}

//+------------------------------------------------------------------+

 
tk748:
Olá Roger09, obrigado novamente por sua ajuda. Meu objetivo é usar um script para mover meu stop loss para quebrar mais x pips em um comércio de compra ou break even menos x pips em um comércio de venda. Eu estabeleço uma chave quente para o roteiro para que eu possa rapidamente obter algum lucro quando a troca se mover em meu favor. Sei que alguns ES'a têm este recurso, mas prefiro usar um script para que eu possa fazê-lo manualmente.

Se você precisar definir sua parada apenas uma vez, use este código EA

int externo pips=10;//

//+------------------------------------------------------------------+

//| função de início do programa de script |

//+------------------------------------------------------------------+

int start()

{

//----

int ot = OrderTotal();

para (int i=0; i<ot; i++)

{

int o = OrderSelect(i, SELECT_BY_POS);

if (OrderSymbol() == Symbol()&&OrderType() <2)

{

dupla lâmina = 0;

se (OrderType() == OP_BUY&& OrderStopLoss() =pips*Point)

sl = OrderOpenPrice() +pips*Point;

if (OrderType() == OP_SELL && (OrderStopLoss() > OrderOpenPrice()||OrderStopLoss()==0)

& &&OrderOpenPrice()-Ask>=pips*Point)

sl = OrderOpenPrice() -pips*Point;

se (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0)))

Print("Error_Modifying - ",GetLastError()));

}

}

//----

retorno(0);

}

 
cgassfr67:
Olá,

Eu sou um EA com CCI.

Meu programa fez uma compra quando a barra anterior ultrapassou CCI>100, mas eu quero comprar 5 pips mais alto que a última barra.

Eu quero o mesmo com a ordem de parada de venda (5 pips abaixo do último mínimo).

Aqui meu EA, você pode me ajudar

Obrigado

Substitua

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;
 
Roger09:
Substitua
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;

Sim, mas com este código, eu quero entrar na abertura do próximo bar, e eu estaria certo de que o próximo bar vai aumentar, então um deve comprar com 5 pips sobre a última alta

 

comércio de ponta de hora

Olá - Estou procurando invocar minha EA com base na hora do dia. talvez 5 da manhã e 5 da tarde, ou a cada 30 minutos, etc.

como posso fazer isso?

Muito obrigado por qualquer ajuda.

Kevin

 

Pode ser que isto o ajude:

if((TimeHour(TimeLocal( ) )!=5&&TimeMinute(TimeLocal( ) )!=0)||(TimeHour(TimeLocal( ) )!=17

&&TimeMinute(TimeLocal( ) )!=0))return();

Coloque-o no início do início().

 

Alguém poderia, por favor, dar uma olhada nisto e me dizer por que não funciona.

Estou procurando usá-lo como um comentário.

duplo AvgWin()

{

dupla ContagemTrades = 0;

dupla ContagemPips = 0;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELLL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips < 0)

retorno(MathRound(CountPips/CountTrades)*10);

mais

Imprimir ("AvgWin em Tempo Real não Disponível");

return(mAvgWin);

}

 

Antes de mais nada substituir

SELECT_BY_TICKET para SELECT_BY_POS

Segundo, CountPips sempre mais do que 0.

 
Roger09:
Antes de mais nada substituir

SELECT_BY_TICKET para SELECT_BY_POS

Segundo, CountPips sempre mais do que 0.

Está bem assim?

int AvgWin()

{

int CountTrades = 0;

int CountPips = 0;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_POS,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELLL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips > 0)

retorno(MathRound(CountPips/CountTrades)*10);

mais

Imprimir ("AvgWin em Tempo Real não Disponível");

return(mAvgWin);

}