Como codificar? - página 250

 
mladen:

Olá Mladen, obrigado por sua ajuda, eu apliquei suas mudanças mas não funciona, talvez fosse mais simples se a EA simplesmente ignorasse qualquer comércio aberto existente, ou seja, simplesmente deixá-los abertos, e depois abrir e fechar seu próprio comércio único

No momento, abre e fecha seu próprio comércio, mas também fecha qualquer comércio aberto adicional existente

 

aumentar

A partir de um código parcial, é o que eu poderia sugerir. Se um parâmetro booleano NoClosesisfor criado, e se esse parâmetro for definido como verdadeiro, ele não deve fechar ordens se aplicado como o snippet (se CB e CS não forem iguais a 1, esse código não fechará ordens).

cumprimentos

Mladen

increase:
Olá Mladen, obrigado por sua ajuda, eu apliquei suas mudanças mas não funciona, talvez fosse mais simples se a EA simplesmente ignorasse qualquer comércio aberto existente, ou seja, simplesmente os deixasse abertos, e depois abrisse e fechasse seu próprio comércio único No momento, ela abre e fecha seu próprio comércio, mas também fecha qualquer comércio aberto adicional existente
 
mladen:
aumentar

A partir de um código parcial, é o que eu poderia sugerir. Se um parâmetro booleano NoClosesisfor criado, e se esse parâmetro for definido como verdadeiro, ele não deve fechar ordens se aplicado como o snippet (se CB e CS não forem iguais a 1, esse código não fechará ordens).

cumprimentos

Mladen

Isso é verdade, mas a menos que eu tenha entendido mal, isso significa que o comércio aberto pela EA também nunca fechará, de modo que ela apenas alterna entre a compra e a venda?

 

Sim. isso é correto

Tanto quanto entendi, essa foi sua idéia: deixar a EA abrir as ordens e então você administraria as ordens (fechando-as) manualmente. Com esse parâmetro, você pode até mesmo mudá-lo de volta para falso e então a EA retomará as ordens de fechamento - assim é "controlável de fora", mais ou menos falando

increase:
Isso é verdade, mas a menos que eu tenha entendido mal, isso significa que o comércio aberto pela EA também nunca fechará, de modo que ela apenas alterna entre a compra e a venda?
 
mladen:
Sim. Isso é correto - tanto quanto entendi, essa foi sua idéia: deixar a EA abrir as ordens e então você administraria as ordens (fechando-as) manualmente. Com esse parâmetro, você pode até mesmo mudá-lo de volta para falso e então a EA retomará as ordens de fechamento - assim é "controlável por fora", mais ou menos falando

Ah, desculpe-me por ser ambíguo, quero que a EA abra e feche seu pedido e ignore qualquer pedido existente, por exemplo

1. Tenho 5 ordens de venda abertas

2. Eu aplico a EA que abre 1 ordem de compra

3. Agora tenho 5 vender e 1 comprar.

4. A EA agora aciona uma venda para fechar sua compra.

5. Agora tenho 6 pedidos de venda (5 existentes, 1 EA vendido)

6. A EA agora aciona uma compra para fechar sua venda

7. Agora tenho 5 vender e 1 comprar, etc.

Vou fechar as vendas existentes, a EA ignora qualquer outro negócio além do seu próprio, como acima

 

aumentar

Ele já faz isso se você definir o Magicparameter com um valor diferente de 0 (esta é uma parte do código que verifica no caso de fechar uma ordem de compra pouco antes do fechamento da ordem)

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

Portanto, se a"Magia" não for igual a 0 e desde que o valor para a Magia seja único, ela fechará somente as ordens abertas por ela mesma

increase:
Ah, desculpe-me por ser ambíguo, quero que a EA abra e feche sua ordem e ignore qualquer ordem existente, por exemplo

1. Tenho 5 ordens de venda abertas

2. Eu aplico a EA que abre 1 ordem de compra

3. Agora tenho 5 vender e 1 comprar.

4. A EA agora aciona uma venda para fechar sua compra.

5. Agora tenho 6 pedidos de venda (5 existentes, 1 EA vendido)

6. A EA agora aciona uma compra para fechar sua venda

7. Agora tenho 5 vender e 1 comprar, etc.

Vou fechar as vendas existentes, a EA ignora qualquer outro negócio além do seu próprio, como acima
 

Trocar uma vez por barra para um período de tempo específico

Olá, queridos fEllA's!

Eu tenho EA (yeeaa, que não) que funciona bem no testador, aceita múltiplos negócios por Barra 4H, como instruído. Agora, ao testar na Demo (Alpari UK) com 11 pares, a EA só leva 1 negociação, enquanto que deve levar mais (3 no máximo, como instruído). Somente a cada barra de 4H, se as condições forem cumpridas.

Eu tenho a função 'Semafor' com código GlobalVariable codificado, e este pedaço de código, para evitar a abertura de múltiplas ordens dentro de 1 TimeFrame (4H neste caso) pré-definido:

//Compra

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

{

se (Somente Sinais)

{

// ------ Alerta deve ser apenas uma vez por sinal OU uma vez a cada 15 ou 30 Minutos

se (CheckAlertTime == iTime (NULL, 5, 0)) retornar(0);

caso contrário CheckAlertTime == iTime (NULL, 5, 0);

if (Alertas) Alerta (Símbolo() + " " + DoubleToStr (Perguntar, Dígitos) + " BUY Signal");

if (PlaySounds) PlaySound (WhichSound);

}

se (!IsTrade && !SignalsOnly)

{

se (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) retornar (0);

senão CheckAlertTime == iTime (NULL, OncePerBarTF, 0);

//Cheque margem livre

se (AccountFreeMargin() < (1000 * Lotes))

{

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

devolução(0);

}

if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Ponto; caso contrário TakeProfitLevel = 0,0;

{

if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);

else Lots = Lots;

}

se (TradeIsBusy() && IsTradingAllowed() < 0)

retorno (-1);

RefreshRates();

Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY" + MagicNo, MagicNo, 0, DodgerBlue);

se (Ticket > 0)

{

se (OrderSelect (bilhete, SELECT_BY_TICKET, MODE_TRADES))

{

Imprimir ("7Qi BUY" aberto: ("7Qi BUY", OrderOpenPrice()));

se (Alertas) Alerta (Símbolo() + " " + DuploToStr (Pedir, Dígitos) + " COMPRAR aberto");

se (PlaySounds) PlaySound (WhichSound);

}

senão

{

Imprimir ("Error opening BUY: ", Err);

}

}

// TradedThisBar = Bars;

se (EachTickMode) TickCheck = Verdadeiro;

se (!EachTickMode) BarCount = Bars;

TradeIsNotBusy();

retornar (0);

}

}

//-------------------------------------------------

É possível que este código:

se (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) retornar (0);

else CheckAlertTime == iTime (NULL, OncePerBarTF, 0);

impede a EA de negociar no meio da Hora? Ele verifica somente no início da Barra?

Se eu usar a função "TradedThisBar = Bars" eu teria que deixar a EA somente em 1 TimeFrame, correto?

A função "Semáforo" também é codificada em TrailingStops, PartialCloseLots também.

Obrigado a todos por sua ajuda,

Divirta-se,

Simon

Eslovênia

 

Iiiiiik - Eu encontrei o problema

Hi!

Encontrei o problema - é muito provavelmente uma combinação de:

se (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)

retorno (-1);

//-----------------------------------------------------------------------------------------

int IsTradingAllowed (int MaxWaitingSec = 30)

{

se (!IsTradeAllowed())

{

int StartWaitingTime = GetTickCount();

Print ("O contexto comercial está ocupado! Espere até ser livre...");

se (Alertas) Alerta (Símbolo() + " Comércio EA não permitido! Aguardando...");

enquanto (verdadeiro)

{

se (IsStopped())

{

Imprimir ("EA foi encerrado!");

retornar(-1);

}

se (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )

{

Imprimir ("Limite de espera excedido (" + MaxWaitingSec + " seg)"! );

retorno(-2);

}

se (IsTradeAllowed())

{

Imprimir ("O contexto comercial agora é livre!");

retornar(0);

}

Dormir (100);

}

}

senão

{

Imprimir ("O contexto comercial é livre!");

retornar(1);

}

}

*/

//-----------------------------------------------

int TradeIsBusy (int MaxWaitingSec = 30)

{

se (IsTesting()) retornar(1);

int Err = 0, StartWaitingTime = GetTickCount();

enquanto (verdadeiro)

{

se (IsStopped())

{

Imprimir ("EA foi encerrado!");

retornar(-1);

}

se (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Impressão ("Tempo de espera (" + MaxWaitingSec + " seg) excedido!");

se (Alertas) Alerta ("Symbol(") + " EA tempo de espera excedido!");

retornar(-2);

}

se (GlobalVariableCheck ("TradeIsBusy"))

pausa;

senão

{

Err = GetLastError();

se (Err != 0)

{

Imprimir ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);

Sleep (100);

continuar;

}

}

se (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) retornar(1);

mais

{

Err = GetLastError();

se (Err != 0)

{

Imprimir ("TradeIsBusy - GlobalVariableSet - Error # ", Err);

Sleep(100);

continuar;

}

}

}

enquanto (verdadeiro)

{

se (IsStopped())

{

Imprimir ("EA foi encerrado!");

retornar(-1);

}

se (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Impressão ("Tempo de espera (" + MaxWaitingSec + " seg) excedido!");

se (Alertas) Alerta ("Symbol(") + " tempo de espera excedido!");

retornar (-2);

}

se (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) retornar (1);

senão

{

Err = GetLastError();

se (Err != 0)

{

Imprimir ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err);

continuar;

}

}

se (Alertas) Alerta (Símbolo() + " - esperando outro EA para terminar a negociação...");

Dormir (1000);

}

}

//--------------------------------

comércio nuloNotBusy()

{

int Err;

se (IsTesting())

{

retorno(0);

}

enquanto (verdadeiro)

{

se (IsStopped())

{

Imprimir (Símbolo() + " EA foi encerrado!" );

retornar(-1);

}

se (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) retornar(1);

mais

{

Err = GetLastError();

se (Err != 0)

Imprimir ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err);

}

Dormir (100);

}

}

//-----------------------------------------------------------------------------------------------

Vou tentar sem a função IsTradeAllowed.

De qualquer forma, obrigado,

Divirta-se,

Simon

 

código de erro 130

----- eliminado ----- não é mais necessário......

 

Tutorial de mq4 para download

Oi, pessoal,

não consegue encontrar um tutorial ou livro de referência ( não online !! ) sobre o código mq4.

você pode me ajudar ?

Com os melhores cumprimentos

SOLVED, teve que descomprimir o arquivo com um utilitário.