Características úteis da KimIV - página 7

 

Como não há dúvidas, vamos continuar...

Função ModifyOrder().

A função ModifyOrder é projetada para alterar um ou mais níveis de preços de um pedido pré-selecionado. Aqui uma ordem pendente é entendida como uma ordem Limit ou Stop, assim como uma ordem de Compra ou Venda no mercado, ou seja, uma posição. Usando a função ModifyOrder você pode modificar dois níveis de preço StopLoss e TakeProfit para a posição, enquanto para a ordem pendente o preço de ajuste de Preço Aberto também pode ser alterado. Os níveis de preços modificados são passados para a função ModifyOrder como parâmetros. Se qualquer um dos parâmetros for negativo, o nível de preço correspondente não será alterado.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
  bool   fm;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
      if (fm) {
        if (UseSound) PlaySound(NameFileSound); break;
      } else {
        er=GetLastError();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
 

Exemplos de como usar a função ModifyOrder().

Decidi dar os primeiros exemplos que já me foram perguntados muitas vezes. Esta é a abertura de posições em termos de execução de ordens de mercado Market Watch. É quando não podemos simultaneamente dar uma ordem para abrir uma posição ao preço de mercado e anexar uma ordem pendente a ela. Tal abertura na Market Watch deve ser realizada em duas etapas: primeiro, abrimos uma posição, e depois anexamos uma ordem pendente a ela, ou seja, estabelecemos níveis de preços StopLoss e TakeProfit.

1. Comprar 0,1 lote do símbolo atual e definir uma parada de 30 pontos

int ti=OpenPosition(NULL, OP_BUY, 0.1);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Ask-30*Point, -1, clModifyBuy);

2. Venda 0,15 lote do instrumento atual e conjunto SL=45, TP=99

int ti=OpenPosition(NULL, OP_SELL, 0.15);
if (OrderSelect(ti, SELECT_BY_TICKET))
  ModifyOrder(-1, Bid+45*Point, Bid-99*Point, clModifySell);
Um roteiro de trabalho com exemplos está incluído no trailer.
Arquivos anexados:
 
Igor, você tem uma função de fechamento de pedidos (tanto fechar como fechar por perto)?
 
Lukyanov:
Igor, você tem uma função para fechar pedidos (tanto Fechar como FecharPor)?
Close is there, CloseBy is not.
 
Fechar em ordem alfabética deve ser antes de ModifyOrder ;-)
 
Lukyanov:
Fechar em ordem alfabética deve ser antes de ModifyOrder ;-)
Sim, é isso mesmo... Abrir primeiro, depois Modificar, e finalmente Fechar ;-)
 

Faz sentido... ;)

Você consideraria atrevido fazer uma pequena libação de um só ponto sobre o tema "Transmissão para funcionar"?
Até agora, é uma floresta lógica-ideológica escura para mim.
(não, não é...).

 
kombat писал (а):
Você consideraria atrevido ter um pouco de educação de um só posto sobre o tema "Transmissão para funcionar"?
Não, eu não o faria. No que diz respeito às minhas funções, quaisquer perguntas são aceitáveis a qualquer momento. Vou tentar responder a todos eles...
 

Obrigado...
E, claro, não há pressa... não há pressa.
O mercado não vai fugir de nós... :)))

 
kombat писал (а):
Obrigado...
E, claro, não há pressa... não há pressa.
O mercado não vai fugir de nós... :)))
Na verdade, eu esperava perguntas de vocês. Perguntas específicas, indicando diretamente o que você precisa esclarecer na área de utilização das minhas funções.
Razão: