コーディングの方法は? - ページ 62 1...555657585960616263646566676869...347 新しいコメント TheRumpledOne 2008.01.10 03:16 #611 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 How to code? コーディングのヘルプ MQL4コースへようこそ Dan7974 2008.01.10 03:55 #612 EAに必要なんだけどな〜。 削除済み 2008.01.14 07:25 #613 コーダーは助けてください ローソク足からもっと上下の点を移動させるために、コードで何を変更すればよいですか? ファイル: diagram.gif 18 kb luxinterior 2008.01.14 08:07 #614 コードを掲載すれば、誰かが実際に助けてくれるかもしれません。 ラックス 削除済み 2008.01.14 15:23 #615 以下はそのインジケータです。 ドットを上下に動かすコードに変更できるインジケータ ファイル: 3_level_zz_semafor.mq4 8 kb mweltin 2008.01.14 21:01 #616 Time[]の適切な使用方法 私はかなりのプログラマーですが、mql4は初めてです。 私はボックストレード(別名ブレイクアウトトレード)のエキスパートアドバイサーに取り組んでいます。 基本的には、特定の時間枠の最高値と最低値を見つけ、ローソク足がその枠の外で閉じたら、取引を行う必要があります。 基本的に3つの状態があり、私は以下の状態でEAを開始することができます。 1) 前日の終値の後、ボックスの開始時刻の前。 2)ボックスの開始時間後、ボックスの終了時間前。 3)ボックスの終了後。 私が混乱したのは、インデックスが変化し続けるので、Time[]配列のことです。 ステート2から入ったとします。 init関数では、グローバル変数にボックスの開始位置を設定するつもりでした。 見積もりが入ってくると、私のstart関数が常に呼ばれ、ボックスの終了時刻になれば、開始と終了の位置がわかるはずです。 もちろん、Time配列のインデックスがどんどん上がっていくので、そうもいきません。 せいぜい、ボックスの開始インデックスの位置をインクリメントし続けることができますが、これはあまりきれいな方法とは思えません。 もし、私が従来のc/c++からmql4へと考え方を変えるべきという提案があれば、ぜひお聞かせください。 また、私が完成した暁には、より上級のプログラマーによるコードレビューから大きな利益を得られることは明らかです。 どなたかボランティアでやっていただけませんか? お時間をいただき、ありがとうございました。 マーカス omelette 2008.01.14 21:35 #617 mweltin: 私はかなりのプログラマーですが、mql4は初めてです。 私はボックストレード(別名ブレイクアウトトレード)のエキスパートアドバイサーに取り組んでいます。 基本的には、特定の時間枠の最高値と最低値を見つけ、ローソク足がそのボックスの外側で閉じたら、私は取引を行う必要があります。 基本的に、EAを起動できる状態は3つあります。 1) 前日の終値の後、ボックスの開始時刻の前。 2)ボックスの開始時間後、ボックスの終了時間前。 3)ボックスの終了後。 私が混乱したのは、インデックスが変化し続けるので、Time[]配列のことです。 ステート2から入ったとします。 init関数では、グローバル変数にボックスの開始位置を設定するつもりでした。 見積もりが入ってくると、私のstart関数が常に呼ばれ、ボックスの終了時刻になれば、開始と終了の位置がわかるはずです。 もちろん、Time配列のインデックスがどんどん上がっていくので、そうもいきません。 せいぜい、ボックスの開始インデックスの位置をインクリメントし続けることができますが、これはあまりきれいな方法とは思えません。 もし、私が従来のc/c++からmql4へと考え方を変えるべきという提案があれば、ぜひお聞かせください。 また、私が完成した暁には、より上級のプログラマーによるコードレビューから大きな利益を得られることは明らかです。 どなたかボランティアでやっていただけませんか? お時間をいただきありがとうございました。 マーカス Time[]関数は 変化し続けることはなく、現在のチャートバーの最後だけ変化します。 一方、TimeCurrent()は継続的に変化する値を返します(1秒の分解能ではありますが)。 iTime()を使えば、任意のバーやタイムフレームの正確な時刻を得ることができます。 かなり多くの方法がありますね...。 jdr100 2008.01.17 16:01 #618 同時に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())。 ありがとうございました manu29 2008.01.17 21:18 #619 コードに関するヘルプ 皆さん、こんにちは。 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); } //+------------------------------------------------------------------+ How to code? コーディングのヘルプ [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 Dan7974 2008.01.18 05:52 #620 なぜうまくいかないのですか? 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); } エラーが出るんです。単純なトレーリングストップが作れない!!!!!!!!!! 1...555657585960616263646566676869...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
どのように私はこれをコード化することができますか?
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);
} // startEAに必要なんだけどな〜。
コーダーは助けてください
ローソク足からもっと上下の点を移動させるために、コードで何を変更すればよいですか?
コードを掲載すれば、誰かが実際に助けてくれるかもしれません。
ラックス
以下はそのインジケータです。
ドットを上下に動かすコードに変更できるインジケータ
Time[]の適切な使用方法
私はかなりのプログラマーですが、mql4は初めてです。 私はボックストレード(別名ブレイクアウトトレード)のエキスパートアドバイサーに取り組んでいます。 基本的には、特定の時間枠の最高値と最低値を見つけ、ローソク足がその枠の外で閉じたら、取引を行う必要があります。
基本的に3つの状態があり、私は以下の状態でEAを開始することができます。
1) 前日の終値の後、ボックスの開始時刻の前。
2)ボックスの開始時間後、ボックスの終了時間前。
3)ボックスの終了後。
私が混乱したのは、インデックスが変化し続けるので、Time[]配列のことです。 ステート2から入ったとします。 init関数では、グローバル変数にボックスの開始位置を設定するつもりでした。 見積もりが入ってくると、私のstart関数が常に呼ばれ、ボックスの終了時刻になれば、開始と終了の位置がわかるはずです。 もちろん、Time配列のインデックスがどんどん上がっていくので、そうもいきません。
せいぜい、ボックスの開始インデックスの位置をインクリメントし続けることができますが、これはあまりきれいな方法とは思えません。
もし、私が従来のc/c++からmql4へと考え方を変えるべきという提案があれば、ぜひお聞かせください。
また、私が完成した暁には、より上級のプログラマーによるコードレビューから大きな利益を得られることは明らかです。 どなたかボランティアでやっていただけませんか?
お時間をいただき、ありがとうございました。
マーカス
私はかなりのプログラマーですが、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);
}
//+------------------------------------------------------------------+
なぜうまくいかないのですか?
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);
}エラーが出るんです。単純なトレーリングストップが作れない!!!!!!!!!!