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

 

メタトレーダーのヘルプで時間関数を 確認し、以下のように試してみてください。

if (TimeHour(Time[0])トレードアワーストップ)

{

Comment("取引停止 - 取引時間外");

return(false);

}

ここで、TimeHourStartとstopは外部変数で、自分で設定します。 return(false);でstart関数を終了し、それ以上の処理は行いません。

グッドラック。

 

Tzumanさん、早速のご返信ありがとうございます。

残念ながら、私のMT4プログラミングは、今のところオンラインEAビルダーが限界です。

でも、これはまさに私が探していたものなのです

 

コメントの文字色とフォントサイズを設定する方法。

こんにちは、皆さん。

私はEAに取り組んでいますが、まだ初心者のプログラマーです...。

そして、私は一般的にどのようにコメントのフォントサイズとテキストの色をコード化し、それをユーザーが設定できるようにする質問があります。どのような外部変数を作成しなければならないのでしょうか?また、どのようにプログラムすればいいのでしょうか?

コメント関数を 使う方法は知っています、例えばこのような感じです。

if(TextOnScreen == true) Comment("このテキストはスクリーンに表示されます ");

しかし、ユーザーが画面に表示されるテキストのフォントサイズを変更したり、EAのオプションで設定を変更してテキストの色を変更したりできるようにするには、どのようにプログラムすればよいのでしょうか?

どなたか数行のコードで助けていただけませんか?大変助かります。

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

ヨハン

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

私はEAに取り組んでいますが、私は初級プログラマーです...。

そして、コメントのフォントサイズとテキストの色をコード化し、ユーザーが設定できるようにする方法について一般的に質問しています。どのような外部変数を作成しなければならないのでしょうか?また、どのようにプログラムすればいいのでしょうか?

コメント関数を使う方法は知っています、例えばこのような感じです。

if(TextOnScreen == true) Comment("このテキストはスクリーンに表示されます ");

しかし、ユーザーが画面に表示されるテキストのフォントサイズを変更したり、EAのオプションで設定を変更してテキストの色を変更したりできるようにするには、どのようにプログラムすればよいのでしょうか?

どなたか数行のコードで助けていただけませんか?大変助かります。

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

ヨハン

あなたは、例えば、ケーブルのようなグラフィックオブジェクトを使用する必要があります。この方法は、マニュアルを読めばすぐに分かります。

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

私はEAに取り組んでいますが、私は初級プログラマーです...。

そして、コメントのフォントサイズとテキストの色をコード化し、ユーザーが設定できるようにする方法について一般的に質問しています。どのような外部変数を作成しなければならないのでしょうか?また、どのようにプログラムすればいいのでしょうか?

コメント関数を使う方法は知っています、例えばこのような感じです。

if(TextOnScreen == true) Comment("このテキストはスクリーンに表示されます ");

しかし、ユーザーが画面に表示されるテキストのフォントサイズを変更したり、EAのオプションで設定を変更してテキストの色を変更したりできるようにするには、どのようにプログラムすればよいのでしょうか?

どなたか数行のコードで助けていただけませんか?大変助かります。

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

ヨハン

ヨハンです。

添付のインジケータを研究してください。

いくつかのコードはテンプレートが使用されているときのためのものです。

私は、テンプレートのために、あるペアのテキストが別のペアのチャートに表示されたときに、それを苦労して発見しました。

もし、もっと多くのテキスト行が必要なら、あなたはそれを理解することができるはずです。

そうでない場合は、もう一度投稿していただければ、複数行の例をお見せします。

ロバート

ファイル:
 

なぜクローズオーダーができないのか、どのようにリミットオーダーをn.o.するのか?

MQL4の初心者ですが、自分のEAをテストしたところ、注文を閉じることができず、各バーでフリーマージンが0になるまで注文を出し、その後、すべての注文を強制的に停止するようです。 どのようにオープンオーダーを制限するのかわかりません。 だれが私に、感謝しているTKSを言うことができる!

コードは続くように。

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

//| Moving Average.mq4

//| Copyright ?2005, MetaQuotes Software Corp.|

||TeamWox Groupware / MetaQuotes Software Corp.

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

#define MAGICMA 20110309

extern double Lots = 1;

extern double MaximumRisk = 0.02;

extern double DecreaseFactor = 10;

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

//| オープンポジションを計算する

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

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

{

if(OrderType()==OP_BUY)買います++。

if(OrderType()==OP_SELL)売値++。

}

}

//---- 注文数量を返す

if(buys>0) return(buys)。

else return(sells)。

}

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

//| 最適なロットサイズを計算します。

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

double LotsOptimized()

{

double lot=Lots;

int orders=HistoryTotal(); // ヒストリーの注文数

int losses=0; // ブレークしないロスカット注文の数

//ロットサイズを選択

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP))。

Print(MarketInfo(Symbol(), MODE_MAXLOT))。

//---- 損切り注文の回数を計算する(ブレークなし

if(DecreaseFactor>0)

{

for(int i=orders-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } { If(OrderSymbol()!

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;

//----

if(OrderProfit()>0)break。

if(OrderProfit()<0)損失++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1)となります。

//これはスマートな技術設計ですが、損失は利益を失うことを意味し、お金ではありません。

//口座の利益率()-注文の利益率()のように変更する。

}

//---- ロットサイズを返す

if(lot<1) lot=1;

return(lot)。

}

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

//| 注文が開いている状態をチェックする|

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

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//---- 新しいバーの最初のティックのためにのみ取引に行く。

if(ボリューム[0]>1) return;

//---- 移動平均を取得

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0)。

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0)とします。

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1)となります。

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1)となります。

//---- 売り条件

if (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0,「私の注文その1」,MAGICMA,0,赤);

を返します。

}

if (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "私の注文その2", MAGICMA,0,Yellow);

を返します。

}

//---- 買いの条件

if ( m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0,「私の注文その1」,MAGICMA,0,青)とします。

を返します。

}

if (m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "私の注文その2",MAGICMA,0,Green);

を返します。

}

//----

}

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

//| 注文が成立しているかどうかを確認する

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

void CheckForClose()

{

double m1,m2,m3,m4;

//---- 新しいバーの最初のティクスのみ取引に行く。

if(ボリューム[0]>1) return;

//---- 移動平均を取得

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0)。

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0)とします。

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1)となります。

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1); m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;

//---- オーダータイプのチェック

if(OrderType()==OP_BUY)

{

if(m1<m3+0.0002)

{

オーダークローズ(OrderTicket(),OrderLots(),Bid,3,Violet);

ブレーク

if(m2<m4+0.0001)

{

オーダークローズ(OrderTicket(),OrderLots(),Bid,3,White);

ブレーク

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan).Break?

ブレーク

if(m2<m4-0.0001)

{

オーダークローズ(OrderTicket(),OrderLots(),Ask,3,Salmon);

ブレーク

}

}

}

//----

}

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

/// スタート関数

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

void start()

{

//---- 履歴と取引をチェックする

if(Bars<55 || IsTradeAllowed()==false) return;

//---- 現在のシンボルで未決済注文を計算する

if(CalculateCurrentOrders(Symbol())==0):現在のシンボルによる未決済注文を計算します。CheckForOpen()を実行します。

else CheckForClose();

//----

}

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

 

Windowsバージョンの検出

Windows APIコールを使って、MT4が動作しているWindowsのバージョンを簡単に調べる方法はありますか?

どなたか、この方法を教えてください。

#import "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#インポート

GetVersionEx関数(Windows)

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

 

ヘルプが必要です。CCIダイバージェンスEAを少し調整したい。

CCI Divergence EAは、MT4のIndicatorsフォルダーにあるカスタムCCI Divergence Indicatorを使用して、いつ取引を行うかを決定しています。

代わりにカスタムのストキャスティクス・ダイバージェンス・インディケータ(私が持っている)を使いたいのです。

EAのコードを変更して、indicatorsフォルダのStochastics Divergence Indicatorに誘導する方法が分かりません。

EAの入力の中で、私は私が置き換える必要があると思います。

extern int CCI_Period = 10;

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

コードのメイン部分では、Indicatorsフォルダの中にカスタムCCI Divergence Indicatorを指している部分がありました。

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, 0, 2)。

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, 1, 2).これは、CCI_Divergence_Indicatorを変更することです。

CCI_Divergence_Indicator" を "Stochastics_Divergence_Indicator" に変更する必要があることは分かっています。そして、CCI_Periodと9を削除する必要があります。

しかし、この部分にStoch_K、Stoch_D、Stoch_Slowingをどのように追加すればいいのか分かりません。

自分で変えてみたのですが、そうするとEAが開きません。

ストキャスティクス・ダイバージェンス・インディケータがcciダイバージェンス・インディケータを置き換えることができるように、この部分をコード化する方法をどなたかご存知でしょうか?

私はEAを作るためにプログラマーにお金を払いましたが、彼は他の顧客のプロジェクトでとても忙しいのです。そのため、マイナーチェンジや修正となると、彼は私のためにそれを行う時間がありません - 少なくともすぐにはできません。だから、ここで質問しているのです。

CCI Divergence Indicatorは、誤ったシグナルが多すぎます。ストキャスティクス・ダイバージェンス・インディケーターの方がずっといい。だから、私は切り替えをしたいのです。

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

 

ヘルプお願いします

私は1つのバー(それが1メートル5メートル189メートルである)の価格が1バーで200ピップ移動したときに私に警告するコードの行を持っています。しかし、私はそれが特定の方向にのみ警告するように設定する方法を見つけ出すことができません。

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); //これはうまく動作します。

しかし、私は200pip UPと200pip DOWNを区別できるようにしたいです。私は読み、フォーラムで尋ね、チャットルームでされ、3日間自分自身を狂わせた。

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");