コーディングの方法は? - ページ 117

 
mystified:
HMAにレベルを追加してみました。

#プロパティ indicator_separate_window

#property インジケーターバッファー2

#property indicator_color1 黒

#property indicator_color2 レッド

#property indicator_width1 2 (プロパティ インジケータ幅1 2)

#property indicator_minimum 0

#property indicator_maximum 100 (最大値)

#property indicator_level1 80

#property indicator_level2 60

#property indicator_level3 40

#property indicator_level4 20

#property indicator_levelcolor DarkSlateGray

しかし、インジケータは別のウィンドウに正しく表示されません。どんな助けでも大いに結構です。

インジケータが強制的にバインドされているため。

この2行を削除します。

#property indicator_minimum 0

#property indicator_maximum 100

Levelsは境界線付きのインジケータでのみ正常に動作しますが、境界線付きのインジケータを実行するには、計算が制限を含む必要があります。

例としてRSI = 100-(100/(1+U/d))

この式では、指標は0-100の間で動くことが分かっているので、70-30レベルが消えてしまうことを心配せずに含めることができます。

他の例としては、MACD = EMA(CLOSE, 12)-EMA(CLOSE, 26))があります。

M5でレベルを設定し、H1に移動したとき、最も可能性が高いのは、レベルが消えていることです。

そこで、同じ計算式に少し手を加えて、MACD= (EMA(CLOSE, 12)-EMA(CLOSE, 26))/EMA(CLOSE, 26)とします。これで、パーセントのインディケータが出来上がりました。境界線はありませんが、レベルを失う可能性は低くなります。

 

Linuxerさんありがとうございます。

 
私は本当にシンプルなEAを作りました。そして、少なくとも3つのタイムフレームで使用するシステムです。5月の問題は、それが開くのを止めないことです。そして、私は1つのペアのために3つのEAと3つのチャートを持ちたくありません。

i need a code that would only do one order for buy and for sell per bar per TF and still open if it is on a different bar. i can have buy and sell and the same bar.

3つのTFに3つのシグナルがあるとき、すべての注文を取りたいのですが、1つのTFに1つの注文しか出さず、別のTFでまだ開いていれば別の注文を出すことができますが、別のバーにあるときです。

4時間足で1つのシグナル

1時間足でシグナルが1つ、しかし4時間足のバーで下落する。

30分足で1シグナル、しかし1時間足と4時間足で1バーだけ。

3つのシグナルがオープンされます。

私は、フィルタの手段としてマジックナンバーを使用しても大丈夫です。

誰かが私を助けることができますか? どうもありがとうございました。

今のところ、これは私が考えたものです。

30分間

if (magicnumber == 123)

{

if (iTime(OrderOpenTime()) != iTime(Symbol(),PERIOD_M30,0))

{//私の注文コード}{//私の注文コード

}

私はMT4を持っていませんが、ロジックやコードに何か問題があることは分かっています。だから、みんなは私を助けてください。

また、Matrixebizと同じような問題があると思います。

どなたか助けてください。

 
mystified:
ありがとうLinuxer。

これは、前の投稿にあった例です(今はOscillator HMA )、やはりMACD ですが、違う方法で計算されています。

 
 

D1のオープニングキャンドルで取引を開始する方法は?

D1フレームで新しいバーが開始されたときにEAにオープントレードを開始するように要求するコードを知っている人はいますか?

以下はそのロジックです。

D1 TFで、新しいローソク足が始まったら、EAは買いと売りの2つのポジションをそれぞれTP=10 pipsでオープンします。

ローソク足が閉じたら、EAはすべてのポジションを閉じて、新しいローソク足で再びポジションを開き始める。

とてもシンプルなルールなのですが、このシンプルなルールのコードが見つからないのです。

私はMQL4コーディングの本当の初心者で、MQL4コーディングについてもっと学ぶために多くのソースやフォーラムをすでに検索して読みましたが、私が必要としているものを見つけることができません。

ありがとうございました。

 

これは私のコードです...それを修正するために私を助けてください。

以前質問した内容をコーディングしてみました。以下はサンプルEAコードです。

int start()

{

LastPrice=0;

LastProfit=0;

LastTicket=0;

LastLots=Lots;

Profit=0;

ProfitPip=0;

PairOrder=0;

OrdersOpened = 0;

PreviousOrders = OrdersOpened;

double Spread = MarketInfo(Symbol(),MODE_SPREAD)。

PipValue=MarketInfo(Symbol(),MODE_TICKVALUE); PipValue=MarketInfo(Symbol(),MODE_TICKVALUE);

ArrayCopyRates(rates, Symbol(), PERIOD_D1);

if(DayOfWeek()==0 || DayOfWeek()==6)

{

//休日は取引しません。

return(0);

さもなくば

{

if (newbar()==Period())

{

for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt --)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Color1);

}

}

OpenBuy();

OpenSell()。

}

}

}

int newbar()

{

double g;

int m,s,k;

m=Time[0]+Period()*60-TimeCurrent()です。

g=m/60.0;

s=m%60;

m=(m-m%60)/60;

return(m);

}

void OpenBuy()

{

double ldLot, ldStop, ldTake;

文字列 lsComm;

ldLot = GetSizeLot();

ldStop = アスクポイント*ストップロス。

ldTake = NormalizeDouble(GetTakeProfitBuy(),Digits).OrderSend(Symbol())。

OrderSend(Symbol(),OP_BUY,ldLot,NormalizeDouble(Ask,Digits),Slippage,ldStop,ldTake, "BUY",Magic,0,Color1);

}

void OpenSell()

{

ダブル ldLot, ldStop, ldTake;

文字列 lsComm;

ldLot = GetSizeLot();

ldStop = Bid+Point*StopLoss;

ldTake = NormalizeDouble(GetTakeProfitSell(),Digits).OrderSend(Symbol())。

OrderSend(Symbol(),OP_SELL,ldLot,NormalizeDouble(Bid,Digits),Slippage,ldStop,ldTake, "SELL",Magic,0,Color1);

}

ダブルGetSizeLot()

{

return(Lots)。

}

ダブルGetTakeProfitBuy()

{

return(Ask+TakeProfit*Point)。

}

ダブルGetTakeProfitSell()

{

return(Bid-TakeProfit*Point)。

}

昨晩、vpsに アップロードしたのですが、今朝チェックしたら、サンプルEAが取引開始されないのですが、誰かサンプルEAを修正するのを手伝ってくれませんか?

btw、私はあまりにもここにそれを添付

 

アラートを長持ちさせる

こんにちは、私は初心者で、このインとアウトを理解しようとしています。

私の現在のインジケータは、アラートを生成するための次のコードを持っていますが、このアラートは、1ビープだけ持続する、私はそれが30または60秒または少なくとも1ビープより少し長く鳴らすことができる方法はありますか?

if (setalert == 1 && shift == 0) {

Alert(Symbol(), " ", period, " ", pattern);

setalert = 0;

}

ありがとうございます。

 

メタトレーダーへの再コード化(クリンガーボリュームオシレーター)

クリンガー・オシレーター(KO)は、スティーブン・J・クリンガー氏によって開発されました。クリンガーは、ジョセフ・グランビル、ラリー・ウィリアムズ、マーク・チャイキンといった著名なテクニシャンによる出来高に関する先行研究から学び、短期および長期の分析に役立つ出来高ベースの指標を開発することに着手したのです。

KOは、短期的なトップとボトムのシグナルとして十分な感度を持ちながら、長期的な資金の出入りを反映するのに十分な精度を持つという、一見相反する2つの目標を念頭に開発された。

KOは、次のような考え方に基づいています。

* 価格帯(高値-安値)は動きの尺度であり、出来高は動きを支える力である。高値・安値・終値の合計がトレンドとなる。高値+安値+終値の合計が前日を上回れば累積。逆に、今日の合計が前日より少ない場合は、分配が起こります。両者の合計が等しい場合、既存のトレンドが維持されます。

* 出来高は、買い圧力と売り圧力を反映した、日中の連続的な価格変動を生み出す。KOでは、1日に蓄積される株数と分配される株数の差を「出来高力」として数値化している。上昇トレンドに伴い出来高が大きく増加し、上昇トレンドの後半から下降トレンドの初期にかけて徐々に減少していくこと。その後、底値圏に到達するまでの間に、ある程度の蓄積を反映して出来高が増加するはずである。

* 出来高をオシレーターに変換し、34周期の指数移動平均と55周期の指数移動平均の差を13周期でトリガーすることで、出来高の出入りを容易に把握することができます。この力を価格変動と比較することで、トップとボトムでのダイバージェンスを特定することができます。

解釈

クリンガー氏は、KOの使用にあたり、以下のガイドラインを推奨しています。

1.1. 最も信頼性の高いシグナルは、トレンドの方向で発生する。厳格なストップ・ガイドライン(すなわち、ゼロ・ラインを突き抜けなかったり、トリガー・ラインを破ったりした場合)が有効であるべきである。

2.2. 最も重要なシグナルは、特に買われすぎ/売られすぎの領域での新高値または新安値で、KOが基調となる価格行動と乖離したときに発生します。例えば、ある銘柄があるサイクルで新高値または新安値を付け、KOがそれを確認できなかった場合、そのトレンドは勢いを失い、終了に近づいている可能性があります。

3.3. 価格が上昇トレンド(89日指数移動平均の上)にある場合、KOがゼロ以下の異常に低いレベルに下がり、上昇に転じ、トリガーラインを越えたときに買います。価格が下降トレンド(すなわち89日指数移動平均より下)にある場合、KOがゼロより上の異常に高いレベルまで上昇し、下降に転じ、トリガーラインを超えたら売ります。

KOは、トレンド方向への売買のタイミングには有効ですが、トレンドに逆らう場合にはあまり有効ではありません。このことは、トレンドに逆らった取引を「スキャルピング」しようとするトレーダーに問題を生じさせる可能性があります。しかし、KOを他のテクニカル指標と組み合わせて 使用すると、より良い結果を得ることができます。買われすぎ、売られすぎを確認するにはウィリアムの%R、短期的な方向性を確認するにはジェラルド・アペルのMACDをお勧めします。

ヒント

スティーブン・クリンガーは、証券に流入・流出する資金の累積を見るために、次の公式を提案しています。

cum(kvo())

この式の 13 期移動平均を、売買のトリガーラインとしてプロットします。

トレードステーションのソースコード

タイプFunction, Name:タイプ: 関数、名前: VForce

Vars:TSum(0), Trend(0), DM(0), CM(0);

TSum = High + Low + Close;

IF TSum > TSum[1] Then

トレンド = 1

それ以外の場合

Trend = -1;

IF トレンド = トレンド[1] Then

CM = CM + レンジ

それ以外

CM = Range + Range[1];

IF CM 0 Then

VForce = Volume * AbsValue(2 * (DM/CM) -1) * Trend * 100;

タイプType: Function, Name:タイプ: 関数、名前: KVO

入力

入力: FastX(Numeric),

SlowX(Numeric); Vars:

FXAvg(0),

SXAvg(0);

FXAvg = XAverage(VForce, FastX).SXAvgはXAverage(VForce, FastX)です。

SXAvg = XAverage(VForce, SlowX);

KVO = FXAvg - SXAvg;

タイプタイプ: インジケータ, 名前:タイプ: インジケータ、名前: Klinger Volume Oscillator

入力

FastX(34),

SlowX(55),

TrigLen(13),

Smooth(1);

Vars:

Trigger(0);Trigger = XAverage(KVO(FastX, SlowX), TrigLen);IF Smooth <= 1 Then Begin

Plot1(KVO(FastX, SlowX), "KVO");

Plot2(Trigger, "KVO Trigger");

End Else BeginPlot1(Summation(KVO(FastX, SlowX), Smooth), "KVO");

Plot2(Summation(Trigger, Smooth), "KVO Trigger");

終了。

Plot3(0, "Zero");

IF Plot1 が Plot2 の上で交差している OR Plot1 が Plot2 の下で交差している OR

Plot2 が Plot3 よりも上、または Plot2 が Plot3 よりも下に交差した場合

Alert = True となります。

どなたか、このコーディングをMql4に変換するのを手伝っていただけませんか?

thks