[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 262

 
Valdemar:

Cavalheiros, podem me dizer onde cometi um erro quando inseri esta função de tempo no meu código EA?

O compilador acaba de me inundar de erros.



No local em que você declarou uma função dentro de outra função:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {
 
Roll:

Ver o 10º parâmetro da função especificada. Ajuste para 0.

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

encontrou esta linha e o que mudar ali ?

 
Starting:

O uso é simples - eu dirijo o roteiro...

Que é o que você precisava provar. Ou seja, você precisa de um código que determine a ordem correta. Existem dezenas de situações deste tipo e não é possível salvar uma função especial para cada uma delas para simplificar o código. Deve ser escrito para cada caso.
Você pode encontrar exemplos de funções similares aqui: Funções úteis da KimIV.

Se os de prateleira não couberem, você pode construir o seu próprio por analogia com os existentes.
 
Bicus:

Aqui o cálculo é baseado na inércia de preços. Ou seja, a primeira ordem é acionada, a segunda ordem tem um lucro com um valor um pouco menor do que a perda. Se o preço se mover na mesma direção um pouco mais, então sim, podemos estar no lucro total.

Mas, imho, esta estratégia não vale uma mordida.

Sim, certo! Adivinhando se vai dar mais alguns pips na direção lucrativa :)
 
granit77:
Isto é exatamente o que temos que provar. Em outras palavras, você precisa de um código que encontre a ordem necessária. Existem dezenas de situações deste tipo e não podemos fornecer uma função especial para cada uma delas para simplificar o código. Deve ser escrito para cada caso.
Você pode encontrar exemplos de funções similares aqui: Funções úteis da KimIV.

Se os de prateleira não couberem, você pode construir o seu próprio por analogia com os existentes.


Acho que não entendi bem a questão.

Asserção 1. todo código, após o acionamento da ordem pendente, ao acessar a data de abertura desta ordem (que se tornou comercializável no momento de tal acionamento), obterá a data de abertura igual à data de colocação da ordem pendente - é assim que a função OrderOpenTime() funciona.

Assunção 2: Você não pode se lembrar do momento exato do acionamento da ordem pendente, sem um consultor especializado que monitore constantemente o estado das ordens na conta.


Possível solução 1. Podemos tentar correr desde a data de definição da ordem pendente até a data atual e anotar a hora da primeira travessia do preço aberto e o nível de disparo.

Este será um tempo mais ou menos exato, mas há um grande "menos": a propagação. Como não registramos o spread na história (não estou levando a história do tick com o spread tirado do Dukas, por exemplo, já que não estou negociando no Dukas e precisamos coletá-lo e gravá-lo), a ordem pode ter disparado muito antes, quando o preço quase tocou o nível aberto mas não o cruzou, e a ordem foi aberta devido à expansão do spread, não mais tarde, quando realmente vimos o preço cruzar a linha de ajuste de ordem pendente.


A solução mais provável é criar um Expert Advisor, colocá-lo no gráfico e monitorar as ordens na conta. Não quero fazê-lo, por algumas razões, há também desvantagens associadas a possíveis problemas durante as pausas na operação da EA.


As funções, às quais você se referiu. Você forneceu um link para a função OrderOpenTime(). Para as ordens atrasadas será a data de sua criação, e não a data de seu acionamento. Portanto, as funções existentes não são adequadas. E não há como combiná-los, já que ainda se referem à OrderOpenTime() para a data de abertura do pedido.

 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

encontrou esta linha e o que mudar ali ?

Imprima os parâmetros e veja
 
Pyxlik2009:

OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest", MediumBlue);

encontrou esta linha e o que mudar ali ?

Você tem o décimo parâmetro "Mais novo", enquanto o número que você precisa é o tempo de expiração do pedido
 

aqui está a linha completa

if (!(AccountFreeMarginCheck(g_symbol_284, OP_BUY, Lots) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */)) g_ticket_352 = OrderSend(g_symbol_284, OP_BUY, Lots, g_ask_528 - gi_164 * g_point_400, Slippage, l_price_40, l_price_32, 0, g_magic_112, "Newest RX-1", MediumBlue);
 
 
Pyxlik2009:

aqui está a linha completa

Novamente:

Documentação:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Seu décimo parâmetro na cadeia "Mais novo" não é um número. É por isso que existe um erro

 

PapaYozh
:


Onde você declarou uma função dentro de outra função:

int init()
  {
  
bool isTradeTimeInt (int hb=05,int mb=50,int he=23,int me=00) 
    {


Obrigado por seu feedback, querido PapaYozh,mas eu inseri esta função no int start(), mas isto não altera o resultado do compilador.

int start()
{
int H,M,Ticket;
double Max,Min,
Max1,Min1,
TP,
Total;

bool isTradeTimeInt(int hb=07,int mb=55,int he=23,int me=00) 
    {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_MINUTES)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 

H=Hour();
M=Minute();
Total=OrdersTotal();
if(Total==0)
{
if(isTradeTimeInt==true)
{
   Max=High[iHighest(Symbol(),PERIOD_M5,MODE_HIGH,12,0)];
   Min=Low[iLowest(Symbol(),PERIOD_M5,MODE_LOW,12,0)];
No final, o compilador me mostrou esses erros, e eu acho que ele está se referindo à definição errada da variável?

Peço desculpas por qualquer inconveniente, incompreensão, afinal, apenas começando a ganhar experiência em um assunto tão difícil, e penso que graças a este fórum e às pessoas que responderam aqui, continuam a desenvolver e melhorar suas habilidades, obrigado.



Razão: