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

 
borisych писал(а) >>

...

3. Aqui, a regressão se refere a uma equação de regressão linear e seu gráfico.

Você perguntou sobre o declive da equação de regressão. Eu lhe mostrei que pode ser calculado de maneira diferente. Se você quiser o que você diz no ponto 3. Você vê 'Funções úteis do KimIV' há 2 tipos de funções, se você precisar de um polinômio de potência superior então use este algoritmo 'Teoria do Fluxo Aleatório e FOREX'.

 

A função StrTran().

Esta função substitui um substrato. Todas as ocorrências são substituídas. Por exemplo, você pode substituir todas as vírgulas por pontos ou vice versa de uma só vez. A função StrSplit() retorna a string resultante e aceita os seguintes parâmetros obrigatórios:

  • str - O cordão no qual o string de substrato está sendo substituído.
  • strFrom - substrato substituído. Se a corda de substratoFrom for encontrada em corda, ela será substituída por corda de substratoTo.
  • strTo - Substrato substituto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran(string str, string strFrom, string strTo) {
  int    n;
  string strOut="", strTemp;

  for ( n=0; n<StringLen( str); n++) {
    strTemp=StringSubstr( str, n, StringLen( strFrom));
    if ( strTemp== strFrom) {
      strOut=StringConcatenate( strOut, strTo);
      n= n+StringLen( strFrom)-1;
    } else strOut=StringConcatenate( strOut, StringSubstr( str, n, 1));
  }
  return( strOut);
}
 

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

  1. Substituição de um ponto decimal por uma vírgula:
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. Remoção de espaços
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. Substituição de palavras
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

Resultados da execução dos exemplos:

ZY. Em anexo está um script para testar a função StrTran().

Arquivos anexados:
 

Lista atualizada de funções:

Arquivos anexados:
f_kimiv.rar  12 kb
 
zhuki писал(а) >>
..
Se você me permite sugerir Função que mostra qualquer coisa no atalho da barra de tarefas .
Eu o uso para monitorar EAs no trabalho sem abrir o terminal (muitos olhos curiosos).

Para este fim, fiz um programa separado para o meu tempo - http://www.miraxem.com/rqids.htm


A calculadora do operador Forex calcula automaticamente o lucro/perda atual nas posições abertas e o lucro/perda no fechamento parcial ou na reversão de uma posição.

Cotações e gráficos em tempo real para 12 pares de moedas

É exibido como uma barra em cima de todas as janelas e mostra a cotação atual para os pares de moedas selecionados, pontos de lucro/perda e um calendário de notícias com um cronômetro que dá um sinal antes de eventos importantes.

 
KimIV писал(а) >>
ah... Bem, se em princípio, você poderia usar um array passado por referência. Então o número de parâmetros retornados seria limitado pelo tamanho da matriz.

Ahh.... Como assim?

"Os argumentos(parâmetros formais) são passados por valor, ou seja, cada expressão xl, . . ., xn é calculada e o valor é passado para a função....".
Exemplo da ajuda

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a= linfunc( some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return ( a* x[0] + b);
  }
E se você tentar atribuir x[0]=999 a uma função, ela irá travar na compilação, se bem me lembro.
'x' - o item da matriz não pode ser atribuído

 
KimIV писал(а) >>
[...]
Estas são operações comerciais OP_BUY e OP_SELL, enquanto as ordens são operações comerciais OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLLIMIT e OP_SELLSTOP no meu entendimento. Eu abro posições e estabeleço ordens. E o que você abre? A função NumberOfOrders() é projetada para trabalhar com pedidos.

Na verdade, isso não deveria fazer diferença. Deve funcionar também com posições.
A função compara ot=OrderType
();

e OrderType()
"Retorna o tipo de operação da ordem atualmente selecionada. Pode ser um dos seguintes valores:
OP_BUY - posição de compra,
OP_SELL - posição de venda,
...

 
diakin писал(а) >>
Ahh.... Como assim?

Eu quis dizer literalmente o seguinte:

void start()
{
  double some_array[];
  string st="";
  linfunc( some_array);
  for (int i=0; i<ArraySize( some_array); i++)
  {
    st=StringConcatenate( st, "some_array[", i, "]=", some_array[ i], "\n");
  }
  Comment( st);
}
void linfunc(double& x[])
{
  ArrayResize( x, 7);
  for (int i=0; i<ArraySize( x); i++)
  {
    x[ i]=0.7*( i+0.1);
  }
}

diakin escreveu >>
x' - item de matriz não pode ser atribuído

em vez de:

double linfunc(double x[], double a, double b)

você tem que

double linfunc(double& x[], double a, double b)
 
diakin писал(а) >>
Na verdade, isso não deveria fazer diferença. Deve trabalhar também com posições.

A divisão em posições e ordens é artificial. Foi inventado por mim para minha própria conveniência pessoal. Ela se baseia nas seguintes diferenças:

1. O preço aberto/estabelecido de um pedido pode ser alterado (OrderOpenPrice()), enquanto a posição não pode ser alterada.

Uma ordem deve ser excluída (OrderDelete()), enquanto uma posição deve ser fechada (OrderClose()).

3. Você pode alterar o tamanho do lote do pedido (comentário, número mágico) sem afetar o depósito. Eliminar o pedido antigo e definir um novo com o novo tamanho de lote (comentário, número mágico). Se você fizer o mesmo com a posição, haverá uma perda igual ao spread multiplicado pelo tamanho do lote e pelo valor do ponto.

4. Uma ordem tem uma vida útil, mas uma posição não tem.

 
KimIV писал(а) >>

Eu quis dizer literalmente o seguinte:

em vez de:

.

Obrigado! Agora saberei que você também pode fazê-lo por referência...

Por que o MQLQLQL deve ajudar a escrever em uma seção que os parâmetros são passados por valor e em outra que "é possível passá-los por referência" ....?

omg!

Quanto aos pedidos, li mais adiante qual é o problema (>1 && <6), ou seja, OP_BUY, OP_SELL não pertencem aqui.

A propósito, o número mágico não pode ser alterado através da OrderModify(). Ou talvez tenha perdido algo novamente? ;-()