Karlson: Diferentes servidores, diferentes 500 pp.
O que é que isto tem a ver com diferentes servidores? Estes são dois testes realizados pela mesma pessoa. Apenas o par de moedas especificado no testador difere
ilunga: O que é que isto tem a ver com diferentes servidores? Estes são dois testes realizados pela mesma pessoa. Apenas o par de moedas especificado no testador difere
Actualize o seu terminal/tester e talvez tudo funcione, tenho o 687 construído e tudo funciona.
Depois, por favor explique, qual é o valor entre parênteses quando abre uma encomenda e porquê num caso é (1.29565 / 1.29654) e no outro (1.29443 / 1.29479 / 1.29443)
(Refiro-me aos resultados dos seus testes.
fyords: Actualize o seu terminal/tester e talvez tudo funcione, tenho um 687 construído e tudo funciona.
Exactamente o mesmo erro "aparece" ao enviar a EA para o campeonato (nos seus testes automáticos), pelo que a actualização só ajudará parcialmente
E mais. Surge apenas 1 vez (a primeira tentativa de colocar uma encomenda num par de moedas que não seja "seu")
ilunga: O que é que isto tem a ver com diferentes servidores? Estes são dois testes realizados pela mesma pessoa. Apenas o par de moedas especificado no testador difere.
Dê uma vista de olhos aos artigos sobre o provador:
Nota, abro ao preço do símbolo Ask mais 1 (com uma margem enorme). Ao mesmo tempo, antes e depois de eu imprimir o actual Ask and Bid.
Resultados (ao testar em GBPUSD):
GR 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:00 Текущая цена Ask:1.29241000
LH 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:00 Текущая цена Bid:1.29220000
QL 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:00 Цена открытия:1.34220000
GD 0 Trade 11:49:402012.01.0209:00:00 buy stop 1.00 EURUSD at 2.29241 (1.29709 / 1.29722)
IG 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:0010009
CP 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:00 Текущая цена Ask:1.29241000
HG 0 test (GBPUSD,H1) 11:49:402012.01.0209:00:00 Текущая цена Bid:1.29220000
O preço 1,29241 é impresso antes e depois da encomenda ser colocada. Entretanto, entre parênteses (quando a encomenda é feita), o preço é 1,29722. COMO? Ou estou a obter o preço actual de forma incorrecta?
E em segundo lugar, se houve um erro com o preço, então porque é que o erro 10016 (pára)?
Para ser honesto, não compreendo bem como pode ser o erro 10016 no caso de não haver paragens
Não sei o que e como o está a fazer, o problema provavelmente está realmente no SL.
A minha versão funciona sem problemas. A chamada, no entanto, lançou o bloco de inicialização, para não se preocupar com as verificações (embora a presença da ordem antes de a definir valesse a pena verificar).
bool BUY_pending(string symbol,ENUM_TIMEFRAMES period,double volume,ulong magic = 0)
{
//----------------------------------------------------------------------------////Work variablesdouble price = 0, sl = 0, tp = 0; //Prices: Open, Sell stop, Take profitint ResCopy = -1; //Result of copying the data into an arrayint Dig = 0; //Digitsbool Result = true; //Returned importance//----------------------------------------------------------------------------//ResetLastError();
//Checking the signal to stopping the trading systemif(IsStopped()) return(false);
//Preparation of structuresZeroMemory(TradeRequest);
ZeroMemory(TradeResult);
ZeroMemory(CheckResult);
//Copying the data into an array
ResCopy = CopyHigh(symbol,period,0,2,bar_info);
if(ResCopy==-1)return(false);
//Calculations
Dig = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
price = NormalizeDouble(bar_info[1] + 500*_Point,Dig);
sl = NormalizeDouble(price - 200*_Point,Dig);
tp = NormalizeDouble(price + 1000*_Point,Dig);
//Preparation of request
TradeRequest.type_filling = ORDER_FILLING_FOK;
TradeRequest.action = TRADE_ACTION_PENDING;
TradeRequest.type = ORDER_TYPE_BUY_STOP;
TradeRequest.deviation = 10;
TradeRequest.symbol = symbol;
TradeRequest.magic = magic;
TradeRequest.volume = volume;
TradeRequest.price = price;
TradeRequest.sl = sl;
TradeRequest.tp = tp;
//Checking
Result = OrderCheck(TradeRequest,CheckResult);
if((!Result)||(CheckResult.retcode!=0))return(false);
//OrderSend
Result = OrderSend(TradeRequest,TradeResult);
//Checking for presence of the errorsif(_LastError!=0){Result = false;}
//----------------------------------------------------------------------------//return(Result);
//----------------------------------------------------------------------------//
}
Não sei o que ou como o está a fazer, o problema provavelmente é realmente com o SL.
A minha versão funciona sem problemas. A chamada é verdadeira, mas eu fiz a chamada para o bloco de inicialização, para não me preocupar com as verificações (embora a presença da ordem antes de a definir valesse a pena verificar).
Um pequeno pedido. Pode corrigir o código, de modo a que este produza o preço actual do símbolo antes da OrderSend?
Diferentes servidores, diferentes 500 pp.
O que é que isto tem a ver com diferentes servidores? Estes são dois testes realizados pela mesma pessoa. Apenas o par de moedas especificado no testador difere
Tenho tudo correcto, servidor MK de demonstração.
Depois, por favor explique, qual é o valor entre parênteses quando abre uma encomenda e porquê num caso é (1.29565 / 1.29654) e no outro (1.29443 / 1.29479 / 1.29443)
(Refiro-me aos resultados dos seus testes.
Actualize o seu terminal/tester e talvez tudo funcione, tenho um 687 construído e tudo funciona.
Exactamente o mesmo erro "aparece" ao enviar a EA para o campeonato (nos seus testes automáticos), pelo que a actualização só ajudará parcialmente
E mais. Surge apenas 1 vez (a primeira tentativa de colocar uma encomenda num par de moedas que não seja "seu")
O que é que isto tem a ver com diferentes servidores? Estes são dois testes realizados pela mesma pessoa. Apenas o par de moedas especificado no testador difere.
Dê uma vista de olhos aos artigos sobre o provador:
Os preços não precisam de ser os mesmos quando se testa num outro par de moedas
Dê uma vista de olhos aos artigos sobre o provador:
Os preços não têm de corresponder quando testados noutro par de moedas
Por isso, efectuou mais alguns testes. Realmente um problema com o "preço actual".
Código:
Nota, abro ao preço do símbolo Ask mais 1 (com uma margem enorme). Ao mesmo tempo, antes e depois de eu imprimir o actual Ask and Bid.
Resultados (ao testar em GBPUSD):
O preço 1,29241 é impresso antes e depois da encomenda ser colocada. Entretanto, entre parênteses (quando a encomenda é feita), o preço é 1,29722. COMO? Ou estou a obter o preço actual de forma incorrecta?
E em segundo lugar, se houve um erro com o preço, então porque é que o erro 10016 (pára)?
Mas o erro ainda existe no cutscene.
Para ser honesto, não compreendo bem como pode ser o erro 10016 no caso de não haver paragens
Não sei o que e como o está a fazer, o problema provavelmente está realmente no SL.
A minha versão funciona sem problemas. A chamada, no entanto, lançou o bloco de inicialização, para não se preocupar com as verificações (embora a presença da ordem antes de a definir valesse a pena verificar).
Não sei o que ou como o está a fazer, o problema provavelmente é realmente com o SL.
A minha versão funciona sem problemas. A chamada é verdadeira, mas eu fiz a chamada para o bloco de inicialização, para não me preocupar com as verificações (embora a presença da ordem antes de a definir valesse a pena verificar).
Um pequeno pedido. Pode ajustar o código de modo a que antes da OrderSend it produza o preço actual do instrumento sobre o qual abrimos?
Tente desta forma:
Pequeno pedido. Pode corrigir o código, que antes de OrderSend it deduz o preço actual sobre essa ferramenta em que abrimos?
Um spritzer de preço? Não vejo necessidade disso, pode acrescentar uma mensagem sobre o sucesso/falha do cheque e a definição da ordem.
Em princípio, pode fazê-lo você mesmo, não deve ser difícil (por ideia).
Tente desta forma:
Para a depuração, será bastante bom, em código de trabalho será supérfluo (pelo menos um pouco de uma solução difícil)
E é melhor colocar ordem após OrderCheck, para que em caso de erro não vá para OrderSend.
PS
Esqueci-me de acrescentar, com base no exemplo bar_info poderia ser colocado numa função sem problemas.
Um spritzer de preço? Não vejo necessidade disso, pode acrescentar uma mensagem sobre o sucesso/falha do cheque e a definição da ordem.
Em princípio, pode fazê-lo você mesmo, não deve ser difícil (na ideia).
Pode ser suficientemente bom para depuração, mas em código de produção será supérfluo (pelo menos é uma solução um pouco tortuosa).
E seria melhor colocar a encomenda após OrderCheck, para que em caso de erro não cheguemos a OrderSend.
PS
Esqueci-me de acrescentar, com base no exemplo bar_info também poderia ser colocado numa função sem qualquer problema.
É engraçado. No vosso exemplo, eu removi o BUYSTOP por GBP, resta apenas EURUSD.
Depois de preencher os campos no pedido, produzi o preço da encomenda pendente.
1) Tem variante - a ordem pendente é colocada na iniciativa
2012.01.01.01 00:00:00 preço = 1.30487000
2) Comentei o init, mudei-o para OnTick. Coloco uma condição para disparar apenas no primeiro tique.
2012.01.02 09:00:00 preço = 1.29720000
P.S. Compreendo correctamente que no meu (e no seu) código bar_info[1] é o máximo da barra actual?