Como você pode ver, são escritas funções que executam ações bastante específicas. E então estas funções são combinadas de modo a implementar as táticas desejadas de trabalhar com posições.
Por favor, Igor, descreva sua funcionalidade com um pouco mais de detalhe. Eu quero compreendê-la, mas devido ao meu modesto conhecimento, perco minha linha de pensamento logo no início.
rid писал (а): Por favor, Igor, descreva sua função com mais detalhes. Quero compreendê-lo, mas por causa de meu modesto conhecimento posso perder meu trem de pensamento logo no início.
Este foi um exemplo tirado de um EA em funcionamento. Atribuição de funções:
Função GetTradeSignal() preenche a matriz ms[] com sinais comerciais. Cada especialista tem seu próprio recheio da função GetTradeSignal(), é claro.
Função ExistPosições() retorna a bandeira de presença de posição.
Função ClosePositions() fecha uma ou mais posições em presença de um sinal correspondente em ms[] array. Antes de fechar, a presença de uma posição é verificada pela condição se (ExistPositions("", -1, Magic)).
Função OpenPosition() abre uma posição ao preço atual na presença de um sinal correspondente na matriz ms[]. A posição só pode ser aberta se não houver sinal.
Táticas:
Se houver posições e houver um sinal para fechar, então feche as posições.
Se não houver posições e houver um sinal para abrir uma posição, então abra uma posição.
Outro problema surgiu. Eu procurei na teoria, mas ainda não encontrei uma saída. Por algum motivo, preciso fechar posições abertas em meu consultor especializado usando a função em vez de usar paradas (Stop Loss e Take Profit). Já o fiz. Funcionou! No entanto...
Ao tentar inserir em um Expert Advisor a biblioteca para calcular lotes (B-lots), descobri que ela começou a trabalhar de uma maneira desconhecida! Se eu não tivesse usado MM, a curva de equilíbrio (após a otimização) subiu constantemente com um drawdown quase imperceptível, depois de adicionar MM eu de repente tive uma queda brusca! Além disso! Mesmo que removamos a biblioteca de lots B e simplesmente aumentemos o tamanho do lote de 0,1 para 0,2, vemos mais uma vez uma forte arrancada. Mesmo quando o depósito inicial é aumentado em várias vezes ..... Ou seja, não é a biblioteca nem o tamanho do depósito - o saque foi miserável para começar... . Eu entro no mercado assim:
//---------------ПОКУПАЕМ ------------------------------------------
... ... ...
if(Long){//выключатель вкл if(!ExpertOrder(MagicLong)){//если нет открытых длинных позиций //Lots=GetSizeLot(); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"AТ",MagicLong,0,Blue);
if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);}}}
Tudo é claro e compreensível aqui. Então eu fecho posições usando a função OrderClose(. ...). Assim:
for(intv=0; v<OrdersTotal(); v++){// for ( int v = OrdersTotal() - 1; v >= 0; v -- ){ if(OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==Symbol()){//----------------------------------------------------- if(ExpertOrder(MagicLong)){if(OrderProfit() > tp){OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); return(0);}if(OrderProfit() <= -sl){OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); return(0);}}}}}
Quando eu inicialmente configuro o lote=0,1, o projeto funciona bem! Quando eu tento mudar o tamanho do lote (aumentar) ou quando eu tento habilitar a biblioteca MM, a operação é quebrada! Eu não consigo entender por quê? Eu usei "Muito" em vez de OrderLots(), mas nada mudou. Por favor, me diga.
rid: Com o lote inicial=0,1 o projeto funciona bem! Quando tento mudar o tamanho do lote (aumentar) ou quando tento ativar a biblioteca MM - a operação é quebrada! Eu não consigo entender por quê? Eu usei "Muito" em vez de OrderLots(), mas nada mudou. Por favor, aconselhar?
Temos que ver como a EA age de forma diferente. As ordens são abertas/fechadas ao mesmo tempo que antes?
Não. Aumentando o lote de 0,1 para 0,2 comércios começa a ocorrer com mais freqüência, mais do dobro da freqüência ! Com os mesmos parâmetros externos ... É estranho, mas eu não era muito preguiçoso! Eu o fiz assim:
Eu removi o fechamento de posições usando a função OrderClose, e providenciei o fechamento normal por Stop Loss e Take Profit na funçãoOrderSend(... ... ...). Neste caso, o bloco MM funcionou como deveria! Parece que é tudo uma questão de função
O resultado ainda é o mesmo! Com a última variante, apenas a última posição aberta é fechada!
Eu o fiz conforme as instruções. E um milagre aconteceu. Todas as posições abertas são fechadas pelo sinal do indicador! Mas por quê?
O resultado ainda é o mesmo! Com a última variante, apenas a última posição aberta é fechada!
Eu o fiz conforme as instruções. E um milagre aconteceu. Todas as posições abertas foram fechadas de acordo com o sinal indicador! Mas por quê?
Costumo implementar este tipo de funcionalidade:
Como você pode ver, são escritas funções que executam ações bastante específicas. E então estas funções são combinadas de modo a implementar as táticas desejadas de trabalhar com posições.Por favor, Igor, descreva sua função com mais detalhes. Quero compreendê-lo, mas por causa de meu modesto conhecimento posso perder meu trem de pensamento logo no início.
Este foi um exemplo tirado de um EA em funcionamento. Atribuição de funções:
Táticas:
Você vê como é fácil? :-)
Olá a todos! Feliz Natal!
Outro problema surgiu. Eu procurei na teoria, mas ainda não encontrei uma saída. Por algum motivo, preciso fechar posições abertas em meu consultor especializado usando a função em vez de usar paradas (Stop Loss e Take Profit). Já o fiz. Funcionou! No entanto...
Ao tentar inserir em um Expert Advisor a biblioteca para calcular lotes (B-lots), descobri que ela começou a trabalhar de uma maneira desconhecida! Se eu não tivesse usado MM, a curva de equilíbrio (após a otimização) subiu constantemente com um drawdown quase imperceptível, depois de adicionar MM eu de repente tive uma queda brusca! Além disso! Mesmo que removamos a biblioteca de lots B e simplesmente aumentemos o tamanho do lote de 0,1 para 0,2, vemos mais uma vez uma forte arrancada. Mesmo quando o depósito inicial é aumentado em várias vezes ..... Ou seja, não é a biblioteca nem o tamanho do depósito - o saque foi miserável para começar... . Eu entro no mercado assim:
Tudo é claro e compreensível aqui. Então eu fecho posições usando a função OrderClose(. ...). Assim:Quando eu inicialmente configuro o lote=0,1, o projeto funciona bem! Quando eu tento mudar o tamanho do lote (aumentar) ou quando eu tento habilitar a biblioteca MM, a operação é quebrada! Eu não consigo entender por quê? Eu usei "Muito" em vez de OrderLots(), mas nada mudou. Por favor, me diga.Com o lote inicial=0,1 o projeto funciona bem! Quando tento mudar o tamanho do lote (aumentar) ou quando tento ativar a biblioteca MM - a operação é quebrada! Eu não consigo entender por quê? Eu usei "Muito" em vez de OrderLots(), mas nada mudou. Por favor, aconselhar?
As ordens são abertas/fechadas ao mesmo tempo que antes?
Não. Aumentando o lote de 0,1 para 0,2 comércios começa a ocorrer com mais freqüência, mais do dobro da freqüência ! Com os mesmos parâmetros externos ... É estranho, mas eu não era muito preguiçoso! Eu o fiz assim:
Eu removi o fechamento de posições usando a função OrderClose, e providenciei o fechamento normal por Stop Loss e Take Profit na funçãoOrderSend(... ... ...). Neste caso, o bloco MM funcionou como deveria! Parece que é tudo uma questão de função
Talvez o valor do "tp" deva ser alterado de acordo com o aumento do lote?O erro está no código. Onde - não sei, porque não há sequer um código. Chamar os clarividentes do próximo ramo ;)