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

 
Dan7974:
どのように私はこれをコード化することができますか?

X.XX50またはX.XX00にタッチしたら

であれば、買います。最後の2つの数字をどのように識別するか?

ありがとうございます。

これはそれを行う必要があります。

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }

else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }

P1Buffer = xPrice + Point*50;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*50;

[/CODE]

When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.

Here's my indicator to identify 00 lines:

[CODE]

//+------------------------------------------------------------------+

//| _TRO_00_Lines |

//| |

//| |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 LightGray

#property indicator_color2 LightGray

#property indicator_color3 LightGray

// indicators parameters

//---- buffers

double P1Buffer[];

double P2Buffer[];

double P3Buffer[];

double xPrice ;

int myStyle = 2 ;

int myWingDing = 250 ;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

SetIndexBuffer(0, P1Buffer);

SetIndexBuffer(1, P2Buffer);

SetIndexBuffer(2, P3Buffer);

SetIndexArrow(0, myWingDing);

SetIndexArrow(1, myWingDing);

SetIndexArrow(2, myWingDing);

SetIndexStyle(0, DRAW_ARROW, myStyle, 1);

SetIndexStyle(1, DRAW_ARROW, myStyle, 1);

SetIndexStyle(2, DRAW_ARROW, myStyle, 1);

SetIndexEmptyValue(0,0);

SetIndexEmptyValue(1,0);

SetIndexEmptyValue(2,0);

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int i, dayi, counted_bars = IndicatorCounted();

//---- check for possible errors

if(counted_bars < 0)

return(-1);

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//----

for(i = limit - 1; i >= 0; i--)

{

if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }

else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }

P1Buffer = xPrice + Point*100;

P2Buffer = xPrice ;

P3Buffer = xPrice - Point*100;

} // for

return(0);

} // start
 

EAに必要なんだけどな〜。

 

コーダーは助けてください

ローソク足からもっと上下の点を移動させるために、コードで何を変更すればよいですか?

ファイル:
diagram.gif  18 kb
 

コードを掲載すれば、誰かが実際に助けてくれるかもしれません。

ラックス

 

以下はそのインジケータです。

ドットを上下に動かすコードに変更できるインジケータ

ファイル:
 

Time[]の適切な使用方法

私はかなりのプログラマーですが、mql4は初めてです。 私はボックストレード(別名ブレイクアウトトレード)のエキスパートアドバイサーに取り組んでいます。 基本的には、特定の時間枠の最高値と最低値を見つけ、ローソク足がその枠の外で閉じたら、取引を行う必要があります。

基本的に3つの状態があり、私は以下の状態でEAを開始することができます。

1) 前日の終値の後、ボックスの開始時刻の前。

2)ボックスの開始時間後、ボックスの終了時間前。

3)ボックスの終了後。

私が混乱したのは、インデックスが変化し続けるので、Time[]配列のことです。 ステート2から入ったとします。 init関数では、グローバル変数にボックスの開始位置を設定するつもりでした。 見積もりが入ってくると、私のstart関数が常に呼ばれ、ボックスの終了時刻になれば、開始と終了の位置がわかるはずです。 もちろん、Time配列のインデックスがどんどん上がっていくので、そうもいきません。

せいぜい、ボックスの開始インデックスの位置をインクリメントし続けることができますが、これはあまりきれいな方法とは思えません。

もし、私が従来のc/c++からmql4へと考え方を変えるべきという提案があれば、ぜひお聞かせください。

また、私が完成した暁には、より上級のプログラマーによるコードレビューから大きな利益を得られることは明らかです。 どなたかボランティアでやっていただけませんか?

お時間をいただき、ありがとうございました。

マーカス

 
mweltin:
私はかなりのプログラマーですが、mql4は初めてです。 私はボックストレード(別名ブレイクアウトトレード)のエキスパートアドバイサーに取り組んでいます。 基本的には、特定の時間枠の最高値と最低値を見つけ、ローソク足がそのボックスの外側で閉じたら、私は取引を行う必要があります。

基本的に、EAを起動できる状態は3つあります。

1) 前日の終値の後、ボックスの開始時刻の前。

2)ボックスの開始時間後、ボックスの終了時間前。

3)ボックスの終了後。

私が混乱したのは、インデックスが変化し続けるので、Time[]配列のことです。 ステート2から入ったとします。 init関数では、グローバル変数にボックスの開始位置を設定するつもりでした。 見積もりが入ってくると、私のstart関数が常に呼ばれ、ボックスの終了時刻になれば、開始と終了の位置がわかるはずです。 もちろん、Time配列のインデックスがどんどん上がっていくので、そうもいきません。

せいぜい、ボックスの開始インデックスの位置をインクリメントし続けることができますが、これはあまりきれいな方法とは思えません。

もし、私が従来のc/c++からmql4へと考え方を変えるべきという提案があれば、ぜひお聞かせください。

また、私が完成した暁には、より上級のプログラマーによるコードレビューから大きな利益を得られることは明らかです。 どなたかボランティアでやっていただけませんか?

お時間をいただきありがとうございました。

マーカス

Time[]関数は 変化し続けることはなく、現在のチャートバーの最後だけ変化します。 一方、TimeCurrent()は継続的に変化する値を返します(1秒の分解能ではありますが)。

iTime()を使えば、任意のバーやタイムフレームの正確な時刻を得ることができます。 かなり多くの方法がありますね...。

 

同時に2つの注文を出すこと (問題...)

なぜ、ある機会には、スクリプトが同時に2つの注文を出すのかわかりません。

どなたか教えてください。

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);

さもなくば

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);

if(チケット>0)

{

if(オーダーセレクト(チケット,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());

else Print("BUY注文の開始エラー :",GetLastError())。

ありがとうございました

 

コードに関するヘルプ

皆さん、こんにちは。

HMAのようなインジケーターの反転を生み出す終値の計算をするインジケーターを作りたいと考えています。そのためには、HMAの1つの値を計算するための関数を作成する必要があり、私は二項ループで現在の値を変更し、反転を作成する値を見つけるクローズ値タブで。

誰か、私のComputeHull関数について助けてくれませんか?

私のコードは、二項対立の研究なしで、computeHull関数と単純なHMAインジケータであり、インジケータは表示されますが、それは下にシフトされています。

以下の通りです。

//#property indicator_separate_window

#property indicator_chart_window (インジケーターチャートウィンドウ)

#property indicator_buffers 3

#property indicator_color1 ブルー

//---- 入力パラメータ

extern int HullAntPeriod=12;

//---- バッファ

double TempBuf1[];

double TempBuf2[];

double HullAntBuf[];

//変数

int HalfHullAntPeriod;

int SqrtHullAntPeriod;

//+------------------------------------------------------------------+

//特定関数

//+------------------------------------------------------------------+

double ComputeHull(int ActualBar)

{

double CloseTemp[];

double Temp[];

double Temp1、Temp2;

double result = -1;

int i;

//CloseTempにクローズ値をコピーする。

ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod).ArrayResize(CloseTemp, Close, 0);

ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod).ArraySetAsSeries(CloseTemp, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);

ArraySetAsSeries(CloseTemp, true);

ArrayResize(Temp, SqrtHullAntPeriod);

//HMA値の計算

for(i=0; i<SqrtHullAntPeriod; i++)

{

Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);

Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);

Temp = 2*Temp1-Temp2;

}

ArraySetAsSeries(Temp, true);

結果 = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);

//----完了

return(result);

}

//+------------------------------------------------------------------+

//| カスタムインジケータ初期化関数

//+------------------------------------------------------------------+

int init()

{

//---- 1個の追加バッファは一時的なデータ用に使用されます。

IndicatorBuffers(3);

//---- 描画の設定

SetIndexStyle(0,DRAW_LINE)を設定します。

SetIndexStyle(1,DRAW_NONE)を設定します。

//---- 2つのインジケータバッファの マッピング

SetIndexBuffer(0,HullAntBuf)を設定します。

SetIndexBuffer(1,TempBuf1)を設定します。

SetIndexBuffer(2,TempBuf2)を設定します。

//DataWindowとインジケータサブウィンドウのラベル名

IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")");

SetIndexLabel(0, "HULL ANTICIPATION").SetIndexLabel(1).SetIndexLabel(2);

SetIndexLabel(1,NULL).SetIndexLabel(1,NULL)を設定します。

SetIndexLabel(2,NULL)を設定します。

//---- 特定のインジケータの初期化

HalfHullAntPeriod = MathFloor(HullAntPeriod/2);

SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));

//---- 初期化完了

return(0);

}

//+------------------------------------------------------------------+

//|カスタムインジケータの初期化関数|||etc.

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| カスタムインジケーターイテレーション関数

//+------------------------------------------------------------------+

int start()

{

int bar, limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0)リターン(-1);

if(counted_bars>0)counted_bars--。

limit=Bars-counted_bars;

for(i=0; i<limit; i++)

HullAntBuf=ComputeHull(i);

//----

return(0);

}

//+------------------------------------------------------------------+

 

なぜうまくいかないのですか?

int Highest;

double Place;

int Start()

{

Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);

if(Gate==0){

if(iClose(Symbol(),0,0)>=Place){

OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);

Gate=1;}

return(0);

}

エラーが出るんです。単純なトレーリングストップが作れない!!!!!!!!!!