Características úteis da KimIV - página 71

 
É preciso numerar os fractais superiores e inferiores separadamente. Nos parâmetros de função, especificar o tipo UPPER ou LOWER e o número fractal. A propósito, se você numerasse as dobras superior e inferior separadamente ao procurar pontos de inflexão em ziguezague também, seria mais conveniente usar.
 
KimIV писал(а) >>

Sim, não há... Porque eu não conseguia decidir como numerar tais fractais:

E se algo assim não contar como uma formação fractal. Uma opção?

 
kombat. Não estou de acordo com esta opção. O fato é que justamente quando há dois fractais na mesma barra, é um sinal da conhecida figura "lente", às vezes chamada de "diamante". Portanto, esta figura pode ser pescada no Expert Advisor por este sinal.
 
Pergunta para Docs e Igor = É possível construir o indicador "Lucro" ou "Fundos" como uma linha contínua do tempo (de diferentes Т\F) em uma janela separada do tempo ( significado - controle do desempenho da carteira em dinâmica)... Infelizmente, há um indicador no site do Igor, mas está na forma de uma tabela e estática ... (ou talvez haja um - me dê um link) ....
 
khorosh писал(а) >>
kombat. Não estou de acordo com esta opção. O fato é que apenas quando há dois fractais em uma barra, é um sinal da conhecida figura "lente", às vezes chamada de "diamante". Portanto, esta figura pode ser pescada na EA por este sinal.

Para definição SIM, mas para numeração, que é o que está em jogo...

 
nuj >> :
Pergunta para Docs e Igor = É possível construir um indicador "Lucro" ou "Fundos" como uma linha contínua do tempo (de diferentes Т\F) em uma janela separada do tempo ( significado - controle do desempenho da carteira em dinâmica)... Infelizmente, há um indicador no site do Igor, mas está na forma de uma tabela e estática ... (ou talvez haja um - me dê um link) ....

busca através do fórum

Arquivos anexados:
equity_v7.mq4  17 kb
 

e pergunte se você tem um conselheiro que o aconselhe:

1. ocupa todas as posições em aberto.

2. estabelece uma parada sem perdas.

3.arrasto

4.Fecha posições em três níveis, por exemplo:

O lote é igual a 1.

A saída 1 - 50% do lote está fechada, por exemplo, 30 pips do preço de abertura.

2 saída - 30% do lote está fechado, por exemplo 70 pontos do preço aberto.

3 saída - 20% do lote está fechado, por exemplo, na passagem de MA.

Obrigado.

 

Boa tarde, você poderia me dizer como implementar a função NumberOfBarOpenLastPos neste simples Expert Advisor,

para que um pedido seja acionado uma vez por barra. Coloquei a função no código, mas nada funciona...

//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#direitos de propriedade intelectual "Copyright © Book, 2007"
#link da propriedade "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// Valores numéricos para M15
StopLoss duplo externo =200; // SL para o pedido que está sendo aberto
Duplo TakeProfit externo =10; // TP para o pedido que está sendo aberto
externo interno Período_MA_1=11; // Período MA 1
externo int Período_MA_2=31; // Período MA 2.
duplo Rastvor externo =28,0; // Distância entre AMs.
Lotes duplos externos =0,1; // Número fixo de lotes.
Prots duplo externo =0,07; // Porcentagem de fundos livres

bool Work=true; // Expert Advisor will work.
Symb; // Nome do instrumento financeiro
//--------------------------------------------------------------- 2 --
int start()
{
int
Total, // Número de pedidos na janela
Dica=-1, // Tipo de pedido selecionado (B=0,S=1)
Bilhete; // Número do pedido
duplo
MA_1_t, // Valor. MA_1 valor atual
MA_2_t, // valor MA_2_t. MA_2_t valor atual, // MA_2_t valor.
Número do lote, //Lote em ordem atualmente selecionado
Lts, //Número de lotes em uma ordem aberta
Min_Lot, // Número mínimo de lotes
Passo, // Passo de mudança de tamanho de lote
Livre, // Fundos livres atuais
One_Lot, // Valor de um lote
Preço, // Preço do pedido selecionado
SL, // Preço SL da ordem selecionada
TP; // TP da ordem selecionada
bool
Ans =falso, // Resposta do servidor após o fechamento
Cls_B=falso, // Critérios para fechar Compra
Cls_S=falso, // Critério de fechamento de Venda
Opn_B=falso, // Critério de abertura da compra
Opn__S=falso; // critério de abertura Vender
//--------------------------------------------------------------- 3 --
//Pré-processamento
if(Bars < Período_MA_2) // Não há barras suficientes
{
Alerta("Não há barras suficientes na janela. O Expert Advisor não está funcionando");
retorno; // Saída início()
}
if(Trabalho==falso) // Erro crítico.
{
Alerta("Erro crítico. O Expert Advisor não está funcionando");
retornar; // Sair do início()
}
//--------------------------------------------------------------- 4 --
// Contagem de pedidos
Symb=Símbolo(); // Nome do instrumento financeiro.
Total=0; // Número de pedidos
for(int i=1; i<=OrdensTotal(); i++) // Laço de encomenda
{
if(OrderSelect(i-1,SELECT_BY_POS)==verdadeiro) // Se o seguinte
{ // Análise de pedidos:
se (OrderSymbol()!=Symb)continuar; // Não nosso instrumento financeiro
se (OrderType()>1) // Temos um pedido pendente
{
Alerta("Ordem pendente detectada. O Expert Advisor não está funcionando;)
retorno; // Saída()
}
Total++; // Contador de ordens de mercado
se (Total>1) // Não mais de um pedido
{
Alerta("Várias ordens de mercado. O Expert Advisor não está funcionando;)
retorno; // Saída()
}
Ticket=OrderTicket(); // Número do pedido selecionado.
Dica =OrderType(); // Tipo da ordem selecionada.
Preço =OrdemPreço Aberto(); // Preço da ordem selecionada.
SL =OrderStopLoss(); // SL da ordem selecionada.
TP =OrderTakeProfit(); // TP da ordem selecionada.
Lote =OrderLots(); // Número de lotes
}
}
//--------------------------------------------------------------- 5 --
// Critérios comerciais
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2

se (MA_1_t > MA_2_t + Rastvor*Point) // se a diferença entre
{ // ...MA1 e 2 é grande
Opn_B=true; // Critério de compra aberta
Cls_S=verdadeiro; // Critério de fechamento Venda
}
if (MA_1_t < MA_2_t - Rastvor*Point) // Se a diferença entre
{ // ..MA_1 e 2 é grande
Opn_S=verdadeiro; //critério de Venda Aberta
Cls_B=true; //Click criteria Compre
}
//--------------------------------------------------------------- 6 --
// Encerrar pedidos
enquanto(true) //Order closing loop.
{
if (Tip==0 && Cls_B===verdadeiro) //Open Buy order.
{ //é um critério de fechamento
Alerta("Tentando fechar Comprar ",Ticket";)
RefreshRates(); // Atualização de dados
Ans=OrderClose(Ticket,Lot,Bid,2); // Fechar Compra
se (Ans===verdadeiro) // Funcionou :)
{
Alerta ("Pedido Fechado de Compra", Ticket;)
pausa; // Saída do circuito fechado
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // tentar novamente
retornar; // Sair do início()
}

se (Tip===1 && Cls_S===verdadeiro) // Ordem de venda aberta.
{ // há um critério próximo
Alerta ("Tentativa de fechar Vender ",Bilhete";)
RefreshRates(); // Atualização de dados
Ans=OrderClose(Ticket,Lot,Ask,2); // Fechar Venda
se (Ans===verdadeiro) // Funcionou :)
{
Alerta ("Pedido de venda fechado", Ticket;)
pausa; // Saída do circuito fechado
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // tentar novamente
retornar; // Sair do início()
}
pausa; // Sair enquanto
}
//--------------------------------------------------------------- 7 --
// Valores do pedido
RefreshRates(); // Atualização de dados
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Número mínimo de lotes
Livre =AccountFreeMargin(); // Fundos livres
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valor de 1 lote
Passo =MarketInfo(Symb,MODE_LOTSTEP); // Passo de mudança de tamanho

se (Lotes > 0) // Se os lotes forem especificados
Lts =Lots; // nós trabalhamos com eles
outros // % de fundos livres
Lts=MathFloor(Livre*Prots/One_Lot/Step)*Step;// Para abertura

if(Lts < Min_Lot) Lts=Min_Lot; // Não menos que Min_Lot; // Não menos que Min_Lot
if(Lts*One_Lot > Free) // Muito mais caro que Free
{
Alerta(" Não há dinheiro suficiente ", Lts," lotes);
retorno; // Saída início()
}
//--------------------------------------------------------------- 8 --
//Opções abertas
se (NumberOfBarOpenLastPos()>0){
while(true) // Fechar o laço do pedido.
{
se (Total==0 && Opn_B===verdadeiro) // Sem ordens em aberto
{ //abrir critério de compra.
RefreshRates(); // Atualizar dados
SL=Bid - New_Stop(StopLoss)*Point; // Cálculo do SL aberto
TP=Bid + New_Stop(TakeProfit)*Ponto; // Cálculo de TP aberto.
Alerta ("Tentativa de abrir a Buy. Waiting for reply...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//open Buy
se (Bilhete > 0) // funcionou :)
{
Alerta ("Pedido de compra aberto", Ticket;)
devolução; //Ordem de saída
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // tentar novamente
retornar; // Sair do início()
}
se (Total==0 && Opn_S===verdadeiro) // sem ordens em aberto
{ // critério de Venda Aberta.
RefreshRates(); // Atualizar dados
SL=Ask + New_Stop(StopLoss)*Point; // Cálculo de SL aberto.
TP=Ask - New_Stop(TakeProfit)*Point; // Cálculo de TP aberto.
Alerta ("Tentativa de abrir Sell. Waiting for reply...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel.
se (Bilhete > 0) // Funcionou :)
{
Alerta ("Pedido de venda aberto", Ticket;)
retorno; // Saída desde o início()
}
if (Fun_Error(GetLastError())==1) // Tratamento de erros
continuar; // tentar novamente
retornar; // Sair do início()
}
pausa; // Sair enquanto
}
}
//--------------------------------------------------------------- 9 --
retornar; //sair enquanto; //arrancar()
}
//-------------------------------------------------------------- 10 --


//+----------------------------------------------------------------------------+
//| Autor : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Versão : 19.02.2008 |
//| Descrição : Retorna o número da barra da última posição aberta ou -1. |
//+----------------------------------------------------------------------------+
//| Parâmetros: |
//| sy - nome do instrumento ("" ou NULL - símbolo corrente) |
//| tf - cronograma ( 0 - cronograma atual) |
//| op - operação ( -1 - qualquer posição) |
//| mn - MagicNumber ( -1 - qualquer número mágico) |
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
data/hora t;
int i, k=OrdensTotal();

if (sy===""" || sy=="0") sy=Symbol();
para (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
se (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
se (mn<0 || OrderMagicNumber()==mn) {
se (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True))
}

int Fun_Error(int Error) // Função de tratamento de erros
{
interruptor(Erro)
{ // Erros que podem ser evitados.
caso 4: Alerta("Servidor comercial está ocupado. Tente novamente...");
Sleep(3000); // Solução simples.
retorno(1); // Função de saída.
caso 135:Alerta ("Preço alterado. Tente novamente...");
RefreshRates(); // Atualização de dados.
retornar(1); // Sair da função.
caso 136:Alerta ("Sem preço. À espera de um novo tique...");
while(RefreshRates()==false) // Até um novo tick
Dormir(1); // Atraso no laço
retornar(1); // Sair da função
caso 137:Alerta ("Corretor está ocupado. Tente novamente...");
Sleep(3000); // Solução simples.
retornar(1); // Sair da função.
caso 146:Alerta("O subsistema comercial está ocupado. Tente novamente...");
Dormir(500); // Decisão simples
retornar(1); // Sair da função
// Erros críticos
caso 2: Alerta("Erro geral;)
retornar(0); // Sair da função.
caso 5: Alerta ("Versão mais antiga do terminal");
Trabalho=falso; // Não funciona mais
retornar(0); // Sair da função
caso 64: Alerta("Conta bloqueada.");
Trabalho=falso; // Não funciona mais
retornar(0); // Sair da função
caso 133:Alerta ("Comércio proibido");
retornar(0); // Sair da função
caso 134:Alerta("Não há dinheiro suficiente para executar a transação");
retornar(0); // Sair da função
default: Alert("Ocorreu um erro ",Error); // Outras opções
retornar(0); // Sair da função
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Verificar stop-prick.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Distância mínima
if (Parametr<Min_Dist) // Se menos do que o permitido.
{
Parametr=Min_Dist; // Definir tolerância.
Alerta("distância de parada aumentada;)
}
retorno(Parametr); // Valor de retorno.
}
//-------------------------------------------------------------- 12 --

 
kurilko >> :

// Abertura dos pedidos

se (NumberOfBarOpenLastPos()>0)

A função retorna mais de 0 somente se uma posição tiver sido aberta, se não -1 então siga...

if (NumberOfBarOpenLastPos()>0|NumberOfBarOpenLastPos()==-1)

{

}

 

Mudou a condição para if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

Ainda não funciona, talvez precise ser escrito em algum outro lugar no código?

Razão: