Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 550

 
iv1986:

No final do código também Alert(result.retcode);

no diário de bordo geral:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) carregado com sucesso

2018.05.14 12:08:17.187 Comércios '992940': limite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Comércios '992940': limite de compra aceito 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Negociações '992940': limite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905 colocado para execução

2018.05.14 12:08:17.546 Comércios '992940': pedido #13235300 limite de compra 3,00 / 3,00 Si-6,18 a 62091 feito em 337.532 ms

2018.05.14 12:08:17.578 Scripts script LIMIT (Si-6.18,M15) removido

Na coluna Especialistas: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alerta: 10009, nada mais

Bem, aqui está como ajudá-lo? Primeiro você escreve que o Sell Limit não é exibido, você dá extratos do log. E agora estamos falando de uma ordem de compra limite. Portanto, o problema deve ser flutuante. Além disso, você nunca citou a lei. Você afirma que a ordem não é visível na realidade. E o estatuto pode ajudar a esclarecer a situação.

 
void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);     // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
         if (p>Bid)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))); 
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                                      // объем 
             request.type     =ORDER_TYPE_SELL_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);      // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
             request.type_time=ORDER_TIME_DAY;
             request.type_filling=ORDER_FILLING_IOC;
             request.stoplimit=Bid;
             OrderSend(request,result);
            }  
       
       Alert(result.retcode);          
     return;
   }
 
Ihor Herasko:

Como posso ajudá-los? Primeiro, você escreve que Sell Limit não está sendo colocado, e você dá trechos do registro. Agora estamos falando de uma ordem de compra limite. Portanto, o problema deve ser flutuante. Além disso, você nunca citou a lei. Você afirma que a ordem não é visível na realidade. O estatuto pode ajudá-lo a esclarecer a situação.

Não há limite de venda nem limite de compra, Alert(result.retcode) retorna 10009. Onde posso obter esta "estatuição", o que preciso fazer?

 
iv1986:

Executar este código por minha conta. Note que você receberá um erro de divisão de 0 nos símbolos não-binários, pois não há margem de inicialização lá.

No código onde eu consegui executá-lo, tive que adicionar uma verificação de volume. Caso contrário, o volume era igual a zero:

if (request.volume < SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN))
   request.volume = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);

Depois disso, o pedido é feito com sucesso. Observe também que ele aciona muito rapidamente - está próximo do preço. Portanto, a ordem em si pode não ser notada por você. Ela é convertida em uma posição ou anexada a ela se o tipo de conta for netting.

 
iv1986:

Não há limite de venda nem limite de compra, Alert(result.retcode) retorna 10009. Onde posso obter este "retcode", o que devo fazer?

A aba "História" da janela "Caixa de ferramentas". No menu de contexto, selecione "Ordens". Em seguida, selecione "Relatório" no menu de contexto - "HTML". Mas você provavelmente poderá ver por si mesmo por que o pedido está faltando: seu status será marcado como "preenchido".

 

Encontrei meu roteiro de 2009, mas agora compila com um aviso:'M' - sequência de fuga de caracteres não reconhecidos 1.mq4 66 37

PapkaFiles    = TerminalPath()+"\MQL4\Files\\";//Путь к терминалу 

Você pode me dizer o que devo ajustar na linha para compilar corretamente?

 
Ihor Herasko:

Executar este código por minha conta. Note que você receberá um erro de divisão de 0 nos símbolos não-binários, pois não há margem de inicialização lá.

No código onde eu consegui executá-lo, tive que adicionar uma verificação de volume. Caso contrário, o volume era igual a zero:

Depois disso, o pedido é feito com sucesso. Observe também que ele aciona muito rapidamente - está próximo do preço. Portanto, a ordem em si pode não ser notada por você. Ela é convertida em uma posição ou anexada a ela se o tipo de conta for netting.

Obrigado!
 
HeAic:

Encontrei meu roteiro de 2009, mas agora compila com um aviso:'M' - sequência de fuga de caracteres não reconhecidos 1.mq4 66 37

Você pode me dizer o que devo ajustar na linha para compilar corretamente?

Colocar uma dupla contrabarra antes da MQL4
 
Olá, você pode me dizer se é possível conectar um sinal de cópia e um robô a uma conta mt4 e conectar tudo isso ao vps?
 
Artyom Trishkin:
Colocar uma dupla contrabarra antes da MQL4
e antes de F também. Todos os cortes devem ser duplos
Razão: