アスク! - ページ 88

 
 

Ralphさん、ありがとうございます。これを試したのですが、別のエラーリストが表示されました。includeファイル内のすべての変数が定義されていないと言われましたが、定義されています。

週末にもう一度やってみようと思います。

faqcya - スクリプトに入れるというのは正しいかもしれませんが、それを入れるシェルEAがない限り、それを呼び出すことをどう処理したらいいのかわかりません。

このままEAにするのはもったいないので、テンプレートから呼び出すか、EAにすることも考えています。

よろしくお願いします。

ケビン

ralph.ronnquist:
@pgtips: 2行目を、
#define MAGIC 20051120
すなわち、等号とカンマがないように変更してください。
 

プログラミングの学習に挑戦

まず、コーダーの達人による講座を一通り読み、非常に興味深い内容であった。ストラテジーを試すには、プログラムを書いて完全に正確であることを確認することが唯一の合理的な方法であるという結論に達しました。残念ながら、私はこのことに関しては全くの初心者です。

基本的なプログラムを書こうとしているのですが、それすらもうまくいきません。少なくともエラーは出なくなったのですが、注文は受けられないのです。私は根気強く挑戦し続けるつもりですが、私の間違いに気づいた誰かからの助けをお願いします。

私が今しようとしていることは、最安値(CurrentLow)を追跡し、一定量(Ret1)リトレースしたら、安値をTPとする売り注文を 出すことだ。

笑わないでほしいのですが、今まで書いたものは以下の通りです。

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

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

int ticket=0;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

ダブルCurrentLow,CurrentHigh;

if(Bid < CurrentLow)

{

CurrentLow = Bid;

if(Bid > CurrentHigh)

{

現在の高値 = 入札

if(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),「Albatross_v1」,757575,0,Green);

return (0);

}

リターン(0)。

}

return(0)。

}

 
Putz:
まず、コーダーの達人さんの講座は全部読ませていただきましたが、とても興味深い内容でした。ストラテジーを試すには、プログラムを書いて完全に正確であることを確認することが唯一の合理的な方法であるという結論に達しました。残念ながら、私はこのことに関しては全くの初心者なのです。

基本的なプログラムを書こうとしているのですが、それすらもうまくいきません。少なくともエラーは出なくなったのですが、注文は受けられません。私は粘り強く、これからも挑戦し続けるつもりですが、私の間違いを見抜いた誰かからの手助けをお願いします。

私が今しようとしていることは、最安値(CurrentLow)を追跡し、一定量(Ret1)リトレースしたら、安値をTPとする売り注文を出すことだ。

笑わないでほしいのですが、今まで書いたものは以下の通りです。

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

extern double TP1=75.0;

extern double Ret1=75.0;

extern double SL1=150.0;

extern double Lots=0.1;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

int ticket=0;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

ダブルCurrentLow,CurrentHigh;

if(Bid < CurrentLow)

{

CurrentLow = Bid;

if(Bid > CurrentHigh)

{

現在の高値 = 入札

if(CurrentHigh >= CurrentLow+(Point*Ret1))

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),「Albatross_v1」,757575,0,Green);

return (0);

}

リターン(0)。

}

return(0)。

}

}

Bid < CurrentLowという真の条件の中で、Bid > CurrentHighをチェックするのは間違っているように思います。

double CurrentLow,CurrentHigh;

int start()

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid > CurrentHigh) CurrentHigh = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point),"Albatross_v1",757575,0,Green);

return(0);

}

さて、3つの注意点です。

- CurrentHighとCurrentLowはグローバルスクープで宣言する必要があり、つまり、どの関数の 外でも(start()は関数です)そうでなければ、これらの変数は関数の呼び出しごとに0に初期化されます。

- CurrentHighは使用されないので、必要ありません。

- CurrentLow の値をリセット/更新するロジックを実装する必要があり、おそらく CurrentLow+(Point*Ret1)) を超える各ティックでの注文の開始を制限する必要があります。

 

Michelさん、こんにちは。

迅速な対応とヘルプをどうもありがとうございました。

CurrentHighを削除して、今はかなり理解できました。プログラムの先頭でCurrentLowも定義し、実際に注文を出すようにしました。

また、より大きなリトレースメントに基づく2つ目の注文を追加し、それが機能しているようです。今、私はそれがすべてのティックで 新しい順序を作成することを停止する方法を考え出す必要がありますが、私はそのようにそれをよりよく学ぶので、私は今のところ自分自身でそれに取り組むつもりです。

また質問させていただくと思います。

またよろしくお願いします。

プッツ

 
Putz:
こんにちは、Michelです。

迅速なご対応とご助力、誠にありがとうございました。

CurrentHighを削除して、だいぶ理解が深まりました。また、プログラムの先頭でCurrentLowを定義し、実際に注文を出すようにしました。

また、より大きなリトレースメントに基づく2つ目の注文を追加し、それが機能しているようです。今、私はそれがすべてのティックで新しい順序を作成することを停止する方法を考え出す必要がありますが、私はそのようにそれをよりよく学ぶので、私は今のところ自分自身でそれに取り組むつもりです。

また質問させていただくと思います。

またよろしくお願いします。

プッツ

CurrentLowを大きな値(1000など)で初期化することを忘れないでください。

 

どのプログラミング言語を学べばいいのでしょうか?

codersguru:
こんにちは、皆さん。

コードの一部を手伝ってほしいというプライベートメッセージがたくさんあるのですが。

ここでは、MQL4に関連する質問を投稿することができます。

親愛なるcodersguru。

もし私がMQL4コードを書くことを学びたいのであれば、どのプログラミング言語を学べばよいでしょうか?Visual BasicかC++ですか?回答ありがとうございました。

 

もっと詳しく教えてください

こんにちは。

またまたお世話になります。私はそれを理解するために多くの他のEAを読んで見てきましたが、私はまだそれを適切に動作させることができません。

私がやろうとしていることは、2つの注文を出すことです。

1) 価格がRet1 (75 pips)でリトレースされたら0.1ロットをTP1 (75) とSL1 (150)で売ります。

2) TP1 (75)とSL1 (75)でRet2 (150 pips)まで価格が戻ったら、0.2ロットを売る。

長期的には、トレンドの方向性に応じて上記のような買い注文が出るようにしたいです。まだ、どのインジケーターでトレンドを判断するかは決めていませんが、いずれはそこに行き着くでしょう。

現在、私が持っているのは次のようなものです。最初の注文はきちんと出るようですが、2つ目の注文が一向に出ません。どんな助けでも非常に高く評価されるでしょう。

EXTERNAL STRING Expert_Name = "Albatross v1";

extern int MagicNumber = 757575;

extern int Slippage = 3.0;

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

extern double TP1=75.0;

extern double TP2=75.0;

extern double Ret1=75.0;

extern double Ret2=150.0;

extern double SL1=150.0;

extern double SL2=75.0;

extern double Lots=0.1;

double CurrentLow=1000;

//double CurrentHigh=0;

int OpenOrders=0,cnt=0。

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

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

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

//int init()

// {

//---- インジケータ

//----

// return(0);

// }

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

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

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

// int deinit()

// {

//---- TODO: ここにあなたのコードを追加してください。

//----

// return(0);

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

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

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

// int start()

// {

//---- TODO: ここにあなたのコードを追加してください。

//----

// return(0);

// }

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

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| オープンポジションコントロールのチェック

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

int CheckOpenTrades()

{

int cnt;

int NumTrades; // このシンボルの売買取引数

NumTrades = 0;

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

{

OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol() != Symbol()) continue;

if ( OrderMagicNumber() != MagicNumber) continue;

if(OrderType() == OP_BUY ) NumTrades++;

if(OrderType() == OP_SELL ) NumTrades++;

}

return (NumTrades);

}

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

//| エキスパートスタート機能

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

int start()

{

int cnt, ticket, total;

double TP;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

total = CheckOpenTrades();

if(total < 1)

{

if(Bid < CurrentLow) CurrentLow = Bid;

if(Bid >= CurrentLow+(Point*Ret1))

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+(SL1*Point),Bid-(TP1*Point), "Albatross_v1", MagicNumber,0,Green).If(ビッド >= CurrentLow+(Point*Ret1)).OrderSend()を実行します。

}

if(total < 2)

{

if(Bid >= CurrentLow+(Point*Ret2))

OrderSend(Symbol(),OP_SELL,Lots*2,Bid+(Point*Ret2),3,Bid+(SL2*Point),Bid-(TP2*Point), "Albatross_v1", MagicNumber,0,Green).を送信する(Symbol())。

return(0);

}

}

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

 

こんな質問ですみません

色で塗りつぶしたオブジェクトを作るには?

デイブ

<<<

 

こんにちは、私はコーダーで、C++で長い間コーディングしてきましたが、FXとMQL4の知識は非常に基礎的なものです。私は誰かが書いたEAを読み、コードを理解しようとしています...

iMAメソッドのSHIFTパラメータとは何なのか、わかりやすく説明していただけませんか?

double iMA(string symbol,int timeframe,int period,int ma_shift,int ma_method,int applied_price, int shift)

MT4のヘルプによると、"指標バッファ から取得した値のインデックス(現在のバーから指定された期間分前に相対的にシフト)"だそうです。- indicator bufferってなんですか?

また、以下のようなこともしているようですが...。

int RealTime = 0;

if( UseCompletedBars )

{

if(timeprev==Time[0]){return(0);} timeprev = Time[0];

RealTime = 1;

}

double MA11 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,0+RealTime);

double MA12 = iMA(NULL,0,MA1Periods,0,MA1MethodSelected, MA1ArraySelected,1+RealTime);

double MA21 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,0+RealTime);

double MA22 = iMA(NULL,0,MA2Periods,0,MA2MethodSelected, MA2ArraySelected,1+RealTime);

if( MA11 > MA21 && MA12 < MA22 ) { EnterLong = True; }

if( MA11 MA22 ) { EnterShort = True; }

私はシフトを知らないので、私はそれを得ることができない理由thatsと思う...

あなたの答えは非常に高く評価されます。

よろしくお願いします。