Como codificar? - página 319

 
Tomcat98:
Olá codificadores,

Como codificar algumas linhas de codificação extras para que um Especialista pare depois de um negócio vencedor?

Os Pips estão no saco, então faça o Expert parar...

Muito obrigado

Tomcat98

Veja abaixo se você tem alguma experiência em codificação. Caso contrário, adquira um codificador.

1) após cada operação fechar, faça um loop em OrdersHistoryTotal() para verificar as operações.

2) verificar para o último fechamento de negócios ( OrderCloseTime() ) .

3) se última negociação, verifique OrderProfit() == lucro.

Se em lucro === verdadeiro, defina EndDayTrade == verdadeiro && LastTradeDay == Dia do ano().

Se em lucro === falso, defina EndDayTrade == falso.

4) Quando o programa passar pelo início(), será necessário inserir ==> se EndDayTrade == falso antes de iniciar qualquer nova operação. Como isso é verdade, então não desencadeará novas negociações.

5) você precisará de uma função timer para verificar se há um novo dia. (assumindo que o novo dia é o que você deseja acionar novas negociações)

A forma mais simples seria se (LastDay != DayofYear() ).

6) dentro da função timer acima, defina LastDay = DayofYear().

if ( LastTradeDay != DayofYear() && EndDayTrade == verdadeiro)

set EndDayTrade == falso, que começa tudo de novo.

variáveis definidas pelo usuário

bool EndDayTrade = falso;

int LastTradeDay = 9999999;

int LastDay = 99999999;

espero que esta explicação seja suficientemente clara.

 
dasio:
Hi,

Estou tentando fundir estes dois códigos, mas tenho problemas com ele.

Preciso que quando uma ordem pendente é preenchida, a outra deve ser cancelada.

Obrigado por sua disponibilidade.

int opened =0;

int pending =0;

for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

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

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

Alguém pode ajudar?

 

dasio

Tente colocar todo esse código no início do procedimento de início(). Você provavelmente terá que filtrar um pouco mais o caminho quando estiver abrindo ordens pendentes, mas se você colocar esse código no início, ele limpará as ordens pendentes se qualquer uma das ordens pendentes antes abertas, porque eu sou uma ordem "regular".

dasio:
Alguém pode ajudar?
 

Hi,

Estou aprendendo muito com este fio, é por isso que continuo a fazer perguntas.

Agora. Tento fazer isto sozinho, mas não tenho conseguido.

Premissa, quero usar este indicador em um gráfico de renko offline.

Meu propósito é traçar acima ou abaixo da vela Quanto tempo durou a construção.

Portanto, sei que na especificação da vela há o momento em que ela se abriu. Portanto, se eu fizer o tempo da vela atual menos a vela da anterior, eu tenho o que preciso.

Então como eu posso codificá-la?

Muito obrigado.

 

Não consigo entender por que este código está tentando modificar as ordens fechadas

Adicionei o OrderCloseTime() a ambos se as declarações pensarem que poriam um fim a este ticket inválido para erro de função de ordermodificação, mas de vez em quando minha EA perderá o controle de todas as ordens e de alguma forma se misturará em uma negociação fechada e tentará continuamente modificá-la, fazendo enormes arquivos de log e não continuará negociando a menos que eu retorne o MT4. Não sei exatamente como está captando uma ordem fechada, talvez enquanto está no processo de modificar todas as ordens, uma delas fecha naquele curto espaço de tempo e a joga fora? Como eu disse, isto acontecerá talvez duas vezes em 30-50 negociações por dia.

Alguém tem alguma idéia de como pôr um fim a isto?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Problemas de sinal

mladen

Muito obrigado, o código agora está funcionando. O alerta não se repete mais. Por favor, quero hospedar um script que enviará alertas comerciais para múltiplos destinatários, como centenas deles, como posso fazer isso... Há empresas que podem lidar com aquilo que você ou qualquer pessoa neste fórum sabe.

Mastercash:
MladenObrigado a você, olhei atentamente....Im ainda estou experimentando o código.estarei notificando quando terminar.
 

...

... 2 pensamentos :

1. Se você vai enviá-lo, então eu acho que a única maneira razoável é enviando e-mails e, nesse caso, por que você não simplesmente usa um dos programas de spam por e-mail que estão lá fora na selva?

2. O envio de sinais tem muitos problemas (esta é minha opinião, alguns dos problemas de envio são praticamente insolúveis). Então por que você não inverte a lógica: em vez de enviar, faça um código que será lido (com nome de usuário, passe, etc...) de um determinado local e assim você tem quase todos os problemas que o envio não pode resolver, resolvidos (incluindo a prevenção do uso de vários IPs ao mesmo tempo)

Então, apenas alguns pensamentos ...

Mastercash:
O alerta não se repete mais. Por favor, quero hospedar um script que enviará alertas comerciais para múltiplos destinatários, como centenas deles, como posso fazer isso... Há empresas que podem lidar com aquilo que você ou qualquer pessoa neste fórum sabe.
 

Tente algo como isto :

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

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

{

if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
Eu adicionei o OrderCloseTime() a ambos se as declarações pensarem que poriam um fim a este ticket inválido para erro de função de ordermodificação, mas de vez em quando minha EA perderá o controle de todas as ordens e de alguma forma se misturará em uma negociação fechada e tentará continuamente modificá-la, fazendo enormes arquivos de log e não continuará negociando a menos que eu retorne o MT4. Não sei exatamente como está captando uma ordem fechada, talvez enquanto está no processo de modificar todas as ordens, uma delas fecha naquele curto espaço de tempo e a joga fora? Como eu disse, isto acontecerá talvez duas vezes em 30-50 negociações por dia.

Alguém tem alguma idéia de como pôr um fim a isto?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Soluções de Alerta

Acho que preciso de mais explicações sobre isso, você pode me dar uma dica sobre como escrever e configurar um código que me ajudará a enviar o alerta para todos os meus clientes ao mesmo tempo? É armazenando seu endereço de e-mail no banco de dados.....mas como a linguagem do servidor, por exemplo, php script, coletará os alertas da plataforma mt4 automaticamente?...... Acho que este é o problema, se houver uma maneira, ele pode ser enviado para vários telefones celulares ou endereços de e-mail.

mladen:
2 pensamentos :

1. Se você vai enviá-lo, então eu acho que a única maneira razoável é enviando e-mails e nesse caso, por que você não simplesmente usa um dos programas de spam por e-mail que estão lá fora na selva?

2. O envio de sinais tem muitos problemas (esta é minha opinião, alguns dos problemas de envio são praticamente insolúveis). Então por que você não inverte a lógica: em vez de enviar, faça um código que será lido (com nome de usuário, passe, etc...) de um determinado local e assim você tem quase todos os problemas que o envio não pode resolver, resolvidos (incluindo a prevenção do uso de vários IPs ao mesmo tempo)

Então, apenas alguns pensamentos ...
 

Mastercash

Tente pesquisar no Google "enviando e-mails em massa" e eu acho que você encontrará uma resposta para isso

A partir da "coleta de alertas" : você tem que ter algo que o"exporte" para algum formato legível que será reconhecido então por um software de sua escolha que distribuirá sinais ou permitirá o acesso a esse sinal

PS: os serviços de sinalização são muito mais complexos do que parece à primeira vista e, se você planeja fazer um, você pode contar com custos substanciais para fazer um funcionar como deve

Mastercash:
Acho que preciso de mais explicações sobre isso, você pode me dar uma dica sobre como escrever e configurar um código que me ajudará a enviar o alerta para todos os meus clientes ao mesmo tempo? É armazenando seu endereço de e-mail no banco de dados.....mas como a linguagem do servidor, por exemplo, php script, coletará os alertas da plataforma mt4 automaticamente?...... Acho que este é o problema, se houver uma maneira, ele pode ser enviado para vários telefones celulares ou endereços de e-mail.
Razão: