EncomendasTotal de devoluções 0
#include <Trade\Trade.mqh>
CTrade trade;
int gi_flag=1;
void OnTick()
{
if(gi_flag==1)
{
trade.PositionOpen(_Symbol,ORDER_TYPE_SELL,1, SymbolInfoDouble(_Symbol,ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0);
gi_flag=0;
}
PrintFormat(DoubleToString(OrdersTotal(),1));
}
Embora entenda que deve retornar 1, ou estou a lê-lo mal?
As ordens não são posições. Uma ordem é uma ordem não executada para abrir uma posição, enquanto que uma posição é o resultado da execução de uma ordem.
Obrigado, estou a ver, por isso vamos usar a função PositionsTotal.
E quanto ao primeiro problema?
Eu escrevi este código e algo não está claro onde o erro pode estar
string Data() { string vr; string den; datetime date=TimeCurrent(); MqlDateTime str; TimeToStruct(date,str); switch(str.day_of_week) { case 0: den = "Воскресенье"; case 1: den = "Понедельник"; case 2: den = "Вторник"; case 3: den = "Среда"; case 4: den = "Четверг"; case 5: den = "Пятница"; case 6: den = "Суббота"; } printf("%02d.%02d.%4d %02d:%02d:%02d %d",str.day,str.mon,str.year,str.hour,str.min,str.sec,str.day_of_week); printf("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den); return(StringFormat("%02d.%02d.%4d %02d:%02d:%02d %s",str.day,str.mon,str.year,str.hour,str.min,str.sec,den)); }
O registo imprime os seguintes resultados
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sábado
tanto quanto sei, o 5º dia é sexta-feira.
Eu escrevi este código e algo não está claro onde o erro pode estar
O registo imprime os seguintes resultados
MF 0 11:06:34 04.06.2010 09:06:43 5RN 0 11:06:34 04.06.2010 09:06:43 Sábado
tanto quanto sei, o 5º dia é sexta-feira.
Para qualquer valor de dia_da_semana receberá o valor "Sábado". Porque não há operadores de pausa entre os casos
2 pontos mais obscuros
void OnTick()
{
for(int li=1; li<2; li++)
{
PrintFormat(SymbolName(li,true));
}
}
Devolve um espaço em branco ou um espaço, mas não um nome de personagem
void OnTick()
{
PrintFormat(DoubleToString(SymbolsTotal(true),1));
}
Devolve 1 apesar de ter pelo menos 10 abertas
Mas se colocar o falso em vez do verdadeiro, tudo parece funcionar bem
Devolve um espaço ou espaço em branco, mas não o nome do personagem
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }Isto é provavelmente correcto se quiser passar por tudo no CD. Se apenas o que está na tabela terminal, então mude falso para verdadeiro.
É isso que estou a dizer: a verdade não funciona!
É isso que estou a dizer, não funciona com a verdade!
Funciona, verifiquei-o em três empresas de corretagem (procurei todos os símbolos que são negociados em empresas de corretagem).
for(int li=0; li<SymbolsTotal(false); li++) { PrintFormat(SymbolName(li,false)); }
E este código passará por tudo o que for seleccionado na janela "Market Watch".
for(int li=0; li<SymbolsTotal(true); li++) { PrintFormat(SymbolName(li,true)); }
O que eu não entendo é isto. Porquê fazer tal pesquisa em OnTick().
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Executando o testador no EURUSD, tudo funciona, ambas as encomendas são enviadas. Se descomentarmos a linha, o pedido GBPUSD não é aberto e há um erro no registo:
2010.06.02 10:34:26 Core 1 falhou a venda imediata 1,00 GBPUSD a 0,00000 [Paragens inválidas]
2010.06.02 10:34:26 Core 1 Sem preços para o símbolo GBPUSD
Eu tentei SymbolInfoTick, a mesma coisa.
Conhece o SymbolInfoTick ou SymbolInfoDouble?