[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 588

 
lottamer:


1) é compreensível

2) acabou de verificar... em Alpari você não pode parar e assumir a abertura. somente através de modificações posteriores... custos de não-problema

3) existe uma estratégia.


Então é tão simples quanto você sugeriu. Após a modificação, você define uma caixa de seleção e verifica seu status antes da modificação, isto é, se houver um pedido. Se houver mais de um, você mesmo precisa prestar contas dos pedidos. Como fazer isso está na seção de artigos.
 
TarasBY:
Nós (meros mortais) não entendemos! ;)))



Vou ler um pouco do meu vácuo ))))
 

Você pode informar se há algum deslize para os valores de parada e takeaway quando os pedidos são reabertos com um capotamento? E como a parada será definida se a diferença entre o preço aberto e a parada após o capotamento for menor do que o valor da parada nivelada?

Minha tarefa é a seguinte. Se eu tiver uma ordem de mercado aberta, devo verificar se ela foi aberta com o rollover e se foi, devo obter o bilhete da ordem anterior, que foi fechada. Talvez alguém me diga qual é o algoritmo de busca? Atualmente estou fazendo o seguinte:

1. Eu seleciono a primeira ordem aberta.
2. Se foi aberto das 23:40 às 00:20, então continuo a verificar mais esta ordem (a janela de 40 minutos é tirada só por precaução, embora em teoria você poderia tirar das 23:50 às 23:59)
3. Lembro-me do bilhete, pare e leve o preço
4. Verifico todas as ordens fechadas no histórico, onde os comentários contêm a palavra swap e os pares de moedas são os mesmos
5. Comparo os dados sobre paradas e aquisições, se corresponderem, aqui é o par de pedidos necessário, se não, volto ao passo 1

 

A resposta foi encontrada (pessoalmente), mas vou deixar o cargo para a história! :))))

----------------------------------

mas eis o que é interessante...

Tenho um roteiro (tenho-o online). ele modifica um pedido aberto.

Minha idéia era tomá-la como um todo e inseri-la em meu Expert Advisor como uma função definida pelo usuário, e chamá-la sempre que necessário.

O problema é que o compilador dá erro "'MB_OK' - variável não definida G:\Program_Files_2\MT4-demo\experts\33.mq4 (153, 37)" - 3ª linha a partir do final

Mas se você compilar o roteiro em si, tudo está claro!

Eu descobri o que é MV_OC...mas não entendo porque funciona no roteiro, mas ele é avisado no Expert Advisor?

//+------------------------------------------------------------------+
//|                                               Изменить стопы.mq4 |
//|                                                          Мефодий |
//|                                                    ppc-2@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Мефодий"
#property link      "ppc-2@mail.ru"
#include <WinUser32.mqh>

extern  int  StopLoss = 500; 
extern  int  TakeProfit = 500;

// #property show_confirm
// #property show_inputs

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start()
  {
        bool   result;
        double stop_loss,take_profit,point,bid,ask, lotsize;
        int    cmd, total, error, spread;
        string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        //if(ret==IDOK) return(0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Acontece que a linha #include <WinUser32.mqh> deve estar presente.

e este arquivo está incluído

 

deixe-me gabar...

você não precisa de nenhuma bandeira ao modificar.

é suficiente sob se condição (cross-means por exemplo)... para ter referência para usar a função COMPRAR e MODIFICAR entre parênteses {}

e desta forma, a condição se propagará a ambas as ações :))

como este

{Meu_comprar ();

My_modify (); }

:))))))))))))))))))))))))

 

lottamer:

como este

{Meu_comprar ();

My_modify (); }

:))))))))))))))))))))))))

Uma interpretação tão frouxa do código do programa precisa ser esclarecida:

    if (условие == true)
    {
        if (Tvoi_buy() == true)  // как вариант
        {Tvoi_Modify();}
    }
:)))
 
TarasBY:

Uma interpretação tão frouxa do código do programa requer esclarecimento:

:)))


por quê?

e My_buy (uma variável não-booleana) pode ser verificada para TRUE-FALSE ?

A modificação vai com certeza - o pedido está aberto - precisamos definir os stop-stocks...

 
lottamer:

a modificação está acontecendo com certeza - o pedido está aberto - você tem que definir os passos de parada...

Então por que você o colocou entre parênteses { } se (médias cruzadas, por exemplo)?
 

Estou me tornando uma mãe na frente dos meus olhos! (ou seja, tornar-se um matriarca!) :))

aqui está a outra coisa.

Se eu modificasse uma ordem, a janela de notificação apareceria depois me informando que a ordem tinha sido modificada com sucesso. Se eu clicar OK nessa janela, é uma pena. Além disso, se eu desabilitar a EA após essa janela aparecer, então, após pressionar OK na janela de mensagem, a EA SEMPRE REPARARÁ suas ações (fechando uma posição, neste caso). Interessante - a EA se foi, mas seus comandos ainda são executados!

Eu tinha que pensar um pouco e remover a linha

message=message+"Ordermodification error#"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n"

Depois disso tudo correu como deveria... nenhuma janela... tudo abre e fecha... abre e fecha... abre e fecha...

:))))))))))))

P.S.

mas se você remover

OrderPrint(); 

continuar;

não há mudança ... a mesma coisa com a linha

if(ret===IDOK) return(0);

esteja ele lá ou não - sem mudanças!

por que é assim?