externint sec=60;//объявляем количество секундint i;//будет индексом текущей "свечи" (тика)int i_prev;//будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назадdouble MyBuffer[];//этот будет на чартеdouble MyTemp[];//этот только для подсчётовint init(){
IndicatorBuffers(2);
SetIndexBuffer(0,MyBuffer)
SetIndexBuffer(1,MyTemp)
SetIndexDrawBegin(0,14);
i=Bars-1;
while(Volume[i]-Volume[Bars-1]<sec) i--;//потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
i_prev=Bars-1;//отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()return(0);
}
int start(){
double deltaHigh,deltaLow;
int counted_bars=IndicatorCounted();//честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)if(counted_bars>=i) i=Bars-counted_bars-1;//аналогичноwhile(i>=0){//цикл обработчика
deltaHigh=High[i]-High[i_prev];//к примеру
deltaLow=Low[i_prev]-Low[i];
//и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
i_prev=i;//запоминаем теперь текущий индекс как индекс предыдущего тикаwhile(Volume[i_prev]-Volume[i]<sec){//и уходим вперёд на заданное количество секунд
i--;
}
}
...
さて、問題です。純粋なM1バージョンでは、次のようなことが標準装備されています。
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;//принтовал, при первом обращении limit=Bars-2, при последующих limit=2for(i=0; i<=limit; i++){
MyBuffer[i]=iMAOnArray(MyTemp, 0, 14, 0, MODE_EMA, i);
limitとcounted_barsを何に置き換えるか?私の理解では
int counted_bars=ArraySize(MyTemp)-1;//сразу после цикла while
#include <MASSIV.mqh> int start()
{
double Price=iOpen (Symbol (),0,0);
double SL=NormalizeDouble (Price+3000*Point, Digits);
double TP=NormalizeDouble (Price-100*Point, Digits);
double value = Bid ;//параметру value функции ArrayBsearch присваивается значение цены последнего тикаdouble ld_Delta = 0.0010;
int S = ArrayBsearch( mass, value, WHOLE_ARRAY, 0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика int last_order_bar = 0;
int ot = OrdersTotal();
...............................(остальной код опустил,но он не изменился)
カスタムインジケータを再描画するコマンドが見つかりません。どなたかご存知の方、教えてください。よろしくお願いします =)
もう見つけたよ。皆さん、ありがとうございました =)
こんにちは。
数式を出すのを手伝ってくれる?
リフィルステップのSD=100がある。
価格が25の場合、トップアウトレベルはDE=100となります。
価格が102であれば、その単価はUD=200となる
価格が215であれば、上乗せ率はBP=300となる
再び135まで下落した場合、UD=200が上値目処となる。
そして、この順番が普通なのです(これが端末の原理です)。
指標Aの パラメータが変更された時に指標Bの 表示を変更したい場合は、指標間で情報交換を行います(ファイル、端末のグローバル変数、コンピューターのRAMなど)。指標Aは 初期化時に初期化可能なパラメータを渡し、指標Bは 指標Aの パラメータ変更の可能性を定期的にチェックし、変更を検出したら指標Bも 新しいパラメータで初期化します(強制init())。
最初のコードはインジケーターA です。
2つ目のコード指標B。
前回の問題は解決し、新たな問題は
小節ごとに補充量を再計算させています。
最後のバーのレベルを記憶する方法
を使い、トレードを開始する
ご返答ありがとうございました。しかし、すべてを理解しているわけではなく、プログラミングも苦手なため、使用できません。
あなたが「遊んでいる」ことを、私が代わりにやってあげなさいということですね。申し訳ないが、興味はない。
また、プログラミングを学んでいる方にとっては、面白い作業だと思います。
int counted_bars=IndicatorCounted();
私は、以下の構成を理解しています。
さて、問題です。純粋なM1バージョンでは、次のようなことが標準装備されています。
limitとcounted_barsを何に置き換えるか?私の理解では
(60秒間のティック数は一定ではないので、int counted_bars=IndicatorCounted()/_number_of_tics_in_60_seconds_ とだけ書いてもうまくいかない).
それとも、私がすべてにおいて間違っているのでしょうか?
p.s. 想定される質問を前に、お答えします。FXではsec!=60は適用できず、sec=60は意味がないことは知っていますが、私はFXでも取引はしていません。
ご返信ありがとうございます。しかし、すべてを理解しているわけではなく、プログラミングも苦手なので使えません。私のインジケータコードに必要な変更を加えていただけないでしょうか?
皆さん、こんにちは。
配列の使い方を勉強中です。
配列があり、文字列で初期化されています。 };
そして、プログラムはその配列を読み込んで実行した。
同じ配列を1つのカラムに初期化しました。
ダブルマッシ[3567]
{
mass [ 0] = 0.85374;
mass [ 1] = 0.85694;
質量[ 2] = 0. 85974;
質量[ 3] = 0.86174;
mass [ 4] = 0.86474;
mass [ 5] = 0.86494;
mass [ 6] = 0.86504;
mass [ 7 ] = 0.86524となります。
}
コンパイラは エラーを発生させず、警告を発生させます。
'{' - expression on global scope not allowed C:\Program FilesAlpari NZ MT4(2)\expertsinclude゙MASSIV.mqh (4, 2)
配列は以前(文字列で初期 化して問題なく動作していた時)と同様にグローバルに宣言されています。
ログには2つの項目しかありません。
2013.04.12 16:14:44 XXXテスト開始
2013.04.12 16:14:36 XXX EURUSD,H1: ロードに成功しました。
の質問ですが、なぜプログラムは1列で初期化された配列を読まない のでしょうか?
ありがとうございます。