Gogetter EA - página 2

 
Maji:
Na verdade, não tenho certeza se posso ajudá-los lá. Primeiro porque tenho que gastar tempo para fazer isso, e isso é agora mesmo um aperto para mim. Segundo porque até agora eu deixei os "indicadores" fazerem todos os desenhos e nunca usei EAs para fazer isso. É possível e eu acho que a teoria é a mesma.

Creio que a Codersguru tinha escrito um capítulo sobre desenho de linhas, flechas, etc. Tente lê-lo

Mais uma vez, copiar e colar ainda requer que você compreenda o que está fazendo. Nada como auto-ajuda e você está provando muito bem este ponto. Continue com o trabalho duro.

ok, você me pegou, eu aceitarei algum crédito pelo trabalho duro. TGIF!! Tenho sido um homem obcecado com isto. Eu mereço uma pausa.

A coisa com o desenho usando indicadores...Eu realmente não me importo COMO é realizado (até certo ponto) apenas que é realizado...Se um indicador pode ser feito que coloca setas no gráfico para abrir e fechar suponho que isso também funcionaria...Eu acho que minha conta ao vivo desenha tudo no tester por si só sem eu dizer para fazer nada...minha conta demo, por outro lado...tem problemas

Estou mais preocupado com o tempo de múltiplas trocas... isso melhora se eu usar o 'tick mode' ? Tenho assistido a isso no teste de avanço e ele faz uma negociação por barra, o que pode colocar as negociações bastante distantes, e canalizar o sinal APÓS o sinal. Se eu vou abrir 5 posições em um sinal, eu quero que ele esteja LIGADO, o sinal não se espalhe mais de meia hora após o sinal...(rolleyes)

 

Construir 1.01 -longos

Isto tem um sinal de que eu trabalhei um pouco que funciona. Agora há algumas diferenças com os calções de gogete com as médias móveis usadas e algumas das lógicas de sinal... Tirei o sinal do gogetetro original que estava trabalhando em longo prazo e brinquei um pouco mais com ele.

Isto é o que mais gosta do GPB/USD 5mTF. Ele praticamente cai nos outros períodos de tempo.

Aproveite, por favor, poste seus resultados/problemas, etc.

Arquivos anexados:
 
eric79:
Oi parabéns pela bela curva de aparência. Acho que uma coisa que poderia ser melhorada é a qualidade de modelagem do teste. 90% seria melhor.

Chego muito perto disso nos GGs 2.11

Não estou acostumado a usar os números de versão e construção...sendo esta a minha primeira aventura...Isso foi adicionado por Graham do fórum factídico...é mais uma coisa para manter o controle de estes devem ter os números de versão e construção atuais na janela do gráfico agora... a mesma lógica e código apenas cosméticos melhores.

Vou deixar que ambos sejam testados em demonstração enquanto trabalhamos em melhorias.

Arquivos anexados:
 

Ainda gostaria de desenvolver sinais e parâmetros de entrada adicionais dentro destes...

 

Acho muito estranho quando algo funciona num dia e não funciona no outro e não fiz nenhuma mudança que eu possa ver...

meu EA no testador de estratégia agora NÃO está respondendo quando eu mudo a configuração 'maxopentrade'...ele usa duas negociações não importa o quê, se eu disser '0' ele ainda usa duas negociações...ele estava funcionando bem ainda hoje e agora de repente está decidido que vai permitir duas negociações abertas o tempo todo não importa o que eu diga....

na semana passada, se lhe disse para permitir 5 negociações de uma vez, permitiu 5 negociações de uma vez e quando lhe disse para permitir 1 negociação de uma vez, permitiu 1 negociação de uma vez.... Eu já vi funcionar!

Agora não posso fazer funcionar para me salvar. o que dá?

Pensei que talvez tivesse perdido um parêntese ou algo na linha se MaxOpenTrade...

TradeSettings();

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if(OrdersTotal() < MaxOpenTrade)

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); [/PHP]

so I changed it to this...

[PHP] TradeSettings();

if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if(OrdersTotal() < MaxOpenTrade){

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

nenhuma melhoria, ainda está ignorando o controle da MaxOpenTrade.

ok, ajuda se eu mantiver registro de qual sinal dos dois estou mudando....lol se estou usando apenas o sinal #2 e mudando a configuração no sinal #1 que faz sentido, huh?

sim, eu estou perdendo meus berlindes.

 
for (int o = 0; o <= MaxOpenTrade; o ++)

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

return(0);

o que isto não faz é modificar as ordens ao mesmo tempo... Acho que preciso fazer algo semelhante com a função de modificação de ordens para que todas elas também modifiquem ao mesmo tempo...

 

Não tenho certeza, mas não acho que seja a maneira correta de fazer o que você quer fazer.

Use a seguinte função:

int CountTrades()

{

int count=0;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

if((OrderType()==OP_SELL) || (OrderType()==OP_BUY))

count++;

}//for

return(count);

}

Agora chame-a em seu programa como

se CountTrades<MaxTrades então....

Além disso, livre-se desse hábito de contar para cima em um loop "para" e use um estilo de contagem regressiva. Será útil quando você estiver tentando fechar negócios e, em geral, resultará em um estilo de codificação mais consistente.

Boa sorte.

 

ok Eu fiz isso, eu atualizei tudo no GGlongs Ea com o CountTrades() mesmo a coisa anterior CloseAll() que você fez antes que estava usando o OrderTotal()... Então TUDO nesta construção particular está agora em contagem regressiva ao invés de contar para cima, eu chamo essa função de alotal.

A EA agora parece funcionar bem para abrir várias ordens ao mesmo tempo e para s/l elas ou t/p elas ao mesmo tempo...

modificando-as por outro lado.... que é irrático e não as modifica todas ao mesmo tempo...

for (int t = 0; t < MaxOpenTrade; t ++)

if(CountTrades() < MaxOpenTrade)

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

return(0);

if (!EachTickMode) BarCount = Bars;

[/PHP]

something about this doesn't work right...however when I do this although it becomes crazy it ends up being more profitable...

this is the code for the 'altered' version that corresponds to the test reports below...when it's like this basically it doesn't modify anything at all....

//Trailing stop for long position

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop || OrderOpenPrice() - Bid >= 0) { //below trigger the Ilevel==Ask

if(OrderStopLoss() < Bid - Point * TrailingStop || OrderStopLoss() == 0) {

for (int t = 0; t < MaxOpenTrade; t ++)

if(CountTrades() < MaxOpenTrade)

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

return(0);

if (!EachTickMode) BarCount = Bars;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

this is the code that corresponds to the 'unaltered' reports below... This modifys but not as I imagine it should doing them all at the same time....

[PHP]//Trailing stop for long position

if(TrailingStopMode && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop || OrderOpenPrice() - Bid >= 0) { //below trigger the Ilevel==Ask

if(OrderStopLoss() < Bid - Point * TrailingStop || OrderStopLoss() == 0) {

//for (int t = 0; t < MaxOpenTrade; t ++)

//if(CountTrades() < MaxOpenTrade)

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

//return(0);

if (!EachTickMode) BarCount = Bars;

TrailingStopMode = False; //resets mode after each order

StopLossMode = False; //resets mode after each order

continue;

embora não goste de como isso está se modificando de acordo com o relatório, no entanto, é muito mais lucrativo....

Eu gostaria de ser capaz de controlar a modificação para fazê-lo como eu quero que ele faça só para saber que eu posso. talvez no final seja melhor deixar assim, mas eu quero saber como fazê-lo modificá-los todos ao mesmo tempo, como está fazendo com a abertura e os fechamentos.

Arquivos anexados:
 

Agora, agora... você chegou tão longe... então pense bem... você tem o código da contagem, então por que não modificá-lo para fazer a ordem modificar coisas... algo como isto...

int ModifyTrades()

{

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

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

}//for

}

Você tem o básico em baixo, e agora cabe a você descobrir o resto.

Boa sorte.

 
Maji:
Agora agora... você chegou tão longe... então pense bem... você tem o código de contagem, então por que não modificá-lo para fazer a ordem modificar coisas... algo como isto...

int ModifyTrades()

{

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)

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

}//for

}

Você tem o básico em baixo, e agora cabe a você descobrir o resto.

Boa Sorte.

que funciona...ver anexo...

o arquivo .htm era muito grande para carregar...basta dizer que ele modifica cada ordem em contagem regressiva ao mesmo tempo é até mesmo rentável não é ruim para este sinal rudimentar.

Arquivos anexados: