KimIVの便利な機能 - ページ 66

 
borisych писал(а)>>

...

3.ここでいう回帰とは、線形回帰式とそのグラフのことである。

回帰式の傾きについてご質問いただきました。違う計算ができることを示しました。ポイント3で言っていることが欲しい場合。KimIVの便利な関数」には2種類の関数がありますが、高次の多項式が必要な場合は、このアルゴリズム「ランダムフロー理論とFOREX」を使ってください。

 

StrTran()関数です。

この関数は、部分文字列を置き換えます。出現するものはすべて置き換えられる。例えば、すべてのカンマをドットに、あるいはその逆を一度に置き換えることができます。StrSplit() 関数は、結果の文字列を返す関数であり、以下の必須パラメータを受け付ける。

  • str- 部分文字列strFrom が置換される文字列.
  • strFrom- 置換された文字列.文字列strの 中に部分文字列strFromが あれば、それを部分文字列strToに 置き換える。
  • strTo- 置換された部分文字列.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}
 

StrTran()関数の使用例です。

  1. 小数点をカンマに置き換える。
    string s=DoubleToStr(Close[1], Digits);
    Print( s);
    s= StrTran( s, ".", ",");
    Print( s);
  2. スペースの削除
    string s="1 2 3 4 5 6 7 8";
    Print( s, " ", StrToInteger( s));
    s= StrTran( s, " ", "");
    Print( s, " ", StrToInteger( s));
  3. 単語の置き換え
    string s="листья жёлтые весной";
    Print( s);
    s= StrTran( s, "весной", "осенью");
    Print( s);

例の実行結果。

ZY. StrTran()関数をテストするスクリプトを添付します。

ファイル:
 

機能一覧を更新しました。

ファイル:
f_kimiv.rar  12 kb
 
zhuki писал(а)>>
..
タスクバーのショートカットに何でも表示する機能を提案させてください。
仕事中にターミナルを開かずにEAを監視するのに使っています(覗き見が多い)。

この目的のために、私は自分の時間のために別のプログラムを作りました -http://www.miraxem.com/rqids.htm


FXトレーダー用計算機は、オープンポジションの現在の利益/損失、およびポジションの一部決済またはオーバーターンの利益/損失を自動的に計算します。

12通貨ペアのリアルタイムの相場とチャート

すべてのウィンドウの上部にバーとして表示され、選択した通貨ペアの現在の相場、利益/損失ポイント、重要なイベントの前にシグナルを出すタイマー付きのニュースカレンダーが表示されます。

 
KimIV писал(а)>>
あまあ、原理的に言えば、参照渡しされる配列を使えばいいんですけどね。そうすると、返されるパラメータの数は、配列のサイズによって制限されることになります。

ああ...どうですか?

"引数(形式パラメータ)は値で渡される、つまり各式xl, ...,xnが 計算されて、その値が関数...に渡される"
ヘルプの例

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);
  }
また、関数に x[0]=999 を代入しようとすると、確かコンパイル時にクラッシュします。
'x' - array item cannot be assigned

 
KimIV писал(а)>>
[...]
これらはトレードオペレーション OP_BUYとOP_SELLであり、オーダーはトレードオペレーションOP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOPだと私は理解している。私はポジションを開き、注文を設定します。で、何を開けるんですか?NumberOfOrders() 関数は、注文を処理するために設計されています。

実際には、違いはないはずです。
この関数は、ot=OrderType
();

OrderType()
比較 します。「現在選択されている注文の操作タイプを返します
OP_BUY - 買いポジション、
OP_SELL - 売りポジション、
...のいずれかになります。

 
diakin писал(а)>>
ああ...どうですか?

文字通り、次のような意味です。

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 さんが書き込みました >>1
x' - 配列の項目は代入できません.

の代わりに

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

なければならない

double linfunc(double& x[], double a, double b)
 
diakin писал(а)>>
実際には、違いはないはずです。ポジションでも動作するはずです。

ポジションとオーダーに分かれているのは人為的なものです。私が自分自身の都合で考案したものです。以下のような違いを踏まえています。

1.注文の開始・設定価格は変更可能(OrderOpenPrice())ですが、ポジションは変更できません。

注文は削除(OrderDelete())されなければならず、一方、ポジションは決済(OrderClose())されなければならない。

3.入金に影響を与えることなく、注文ロットサイズ(コメント、マジックナンバー)を変更することができます。古い注文を削除し、新しいロットサイズ(コメント、マジックナンバー)で新しい注文を設定します。ポジションで同じことをすると、スプレッドにロットサイズとポイント値を掛けただけの損失が発生します。

4.オーダーには寿命がありますが、ポジションには寿命がありません。

 
KimIV писал(а)>>

文字通り、次のような意味です。

の代わりに

.

ありがとうございました。これで、リファレンスでもできることがわかったので...。

なぜMQLQLヘルパーは、あるセクションでパラメータは値で渡すと書き、別のセクションで「参照で渡すことも可能」・・・と書かなければならないのでしょうか?

ω・)ノ

注文については、何が問題なのか(>1 && <6)、つまりOP_BUY, OP_SELLはここに属さないということをさらに読みました。

ちなみに、マジックナンバーはOrderModify()変更 することはできません。それとも、また何か見落としがあったのでしょうか?;-()