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

 
lincoln2012:
私はMQ4を学習しようとしています。私の最初の簡単なプログラムは、2つのMAが交差したときに警告をポップすることになっています。私はなぜ理解することはできません

このコードは動作しません。

どんな助けでも本当に感謝します!よろしくお願いします。

extern int Period_MA1 = 5;

extern int Period_MA2 = 1;

double MA1;

double MA2;

int init()

{

return(0);

}

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

int deinit()

{

return(0);

}

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

int start()

{

//--------------------------------------------------------------------

MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0)。

MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);; MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);

//--------------------------------------------------------------------

if (MA2 == MA1 )

Alert("価格は同じです(",Period_MA2,").");//Alert

を返します。

}

こんにちは、Lincoln2012。

このMa Crossのコードをチェック アウトするかもしれません。

ファイル:
macross-1.mq4  7 kb
 
lincoln2012:
私はMQ4を学ぼうとしています。私の最初の簡単なプログラムは、2つのMAが交差したときに警告をポップすることになっています。私はなぜ理解することはできません

このコードはうまくいきません。

}

任意の2本のインジケータの クロスをコード化するポイントはこのような考え方です。

1.1. 現在のバーがライン1>ライン2であり、前のバーがライン1<ライン2であれば、Up crossとなる。

2.2. もし、現在のバーline1line2なら、Down crossです。

 
mj10:
ハイ

Mt4でちょっとしたプログラミングをしているのですが、これがまた面白い!でもプロではないので、古いインジケーターを編集しているだけです。OK シンプルなインジケータを作りたいんだけど、どうすればいいのかわからないんだ。

そのシンプルなインジケータは、単純に値をチェックし、すべての変数の値が同じであれば、すべての変数の値が一致するポイントを描画するものだ。

私の簡単な解決法

変数があったとします

double moveavg1;

double movingavg12;

double movingavg13; double movingavg13;

double movingavg14;

double moveavg15;

double moveavg16;

double movingavg17;

double moveavg18;

double moveavg19;

double moveavg10;

double movingavgall;

iStochastic(1)を例に挙げていますが、どのようなインジケータでも使用可能です。

移動avg12=iStochastic(1)

moveavg13=iStochastic(2)とします。

.

.

.

ということで

さて

if (movingavg12=movingavg13=movingavg14,...) (put value in variable "movingavgall") //vriaに等しい値を入れる。

バー上にムービングアブガルを描画

応用編

移動平均線3と移動平均線5が同じ値であることを確認したいとします。

RSI 1とRSI 2の値が80の場合、このインジケータはRSIと一緒に使うことができます。

などなど

MTFを追加しても、それはボーナスとして追加されるでしょう。

文章で書くと簡単そうですが、解決策が見つからなかったので、どなたか助けていただければと思います。

私が言っていることが理解できれば幸いです。

しゃい

比較する値があれば、次のようなコードを使うことになります。

値が等しいかどうかのチェックは==を使います。 1つの=は変数に値を代入するのに使います。

2つ以上の値を比較する場合は、ANDの意味を持つ&&を使用します。

moveavgall = 0;

if ((a == b) && (b == c) && (c == d)) moveavgall = a;

次に、movingavgall が値を持つかどうかを次のようにして確認します。

if (movingavgall != 0)

{

// ここで何かする

}

Googleでメタトレーダープログラムを検索してください。

MT4でプログラミングをするための良いチュートリアルがいくつか見つかるはずです。

C言語プログラミングの良い本も役に立ちます。

ロバート・ヒル、別名MrPip

 

このコードを簡略化する

みなさん、こんにちは。

このコードをstringconcatenateコマンドを使用して簡略化しようとしています。

ObjectSetText("uitog1v",StringConcatenate("/\ ", uitog1v, "%"),12, hr1v, DodgerBlue ).を使って、このコードを簡略化しようとしています。

をクリックすると、このようになります。

ObjectSetText("uitog1v",StringConcatenate("/TEINC ", uitog1v,"%","/TEINC ", uitog2v,"%","/TEINC ", uitog3v,"%"),12,StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ).とすることで、このようになります。

どなたか助けていただけると幸いです。

よろしくお願いします。

doc

トレンド_alexcud_v_2men.mq4

ファイル:
 

...

ドキュメント

これらの要素がすべて必要な場合、これ以上簡単な書き方はないでしょう。

dr.house7:
皆さん、こんにちは。

このコードをstringconcatenateコマンドで簡略化するとこんな感じです。

ObjectSetText("uitog1v",StringConcatenate("/Think ", uitog1v, "%"),12, hr1v, DodgerBlue );

をクリックすると、このようになります。

ObjectSetText("uitog1v",StringConcatenate("/TEINC ", uitog1v,"%","/TEINC ", uitog2v,"%","/TEINC ", uitog3v,"%"),12,StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ).とすることで、このようにすることが可能です。

どなたか助けていただけると幸いです。

よろしくお願いします。

ドク

トレンド_alexcud_v_2men.mq4
 

方法60秒ごとにアラートを出す

60秒ごとにアラートを出すようなコードを作るにはどうしたらいいですか?

下記のコードを作成しましたが、チャートに貼り付けた時点から1分ごとにアラートが表示されます。

#include

#include

// exported variables

// local variables

double PipValue=1; // this variable is here to support 5-digit brokers

bool Terminated = false;

string LF = "\n"; // use this in custom or utility blocks where you need line feeds

int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks

int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names

int ExpectedTime2 = 0;

int init()

{

NDigits = Digits;

ObjectsDeleteAll(); // clear the chart

Comment(""); // clear the chart

}

// Expert start

int start()

{

if (Bars < 10)

{

Comment("Not enough bars");

return (0);

}

if (Terminated == true)

{

Comment("EA Terminated.");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && true) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

OncePerMinutes2();

}

void OncePerMinutes2()

{

int datetime800 = TimeLocal();

if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1; // reset paused time

}

if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)

{

ExpectedTime2 = datetime800 + 60 * 1;

Alert3();

}

}

void Alert3()

{

Alert("One minute gone");

}

int deinit()

{

if (true) ObjectsDeleteAll();

}

 
mladen:
ドク これらの要素がすべて必要であれば、これ以上シンプルな書き方はないでしょう。

うーん、今回は運が悪かった、とにかくありがとうございます。

よろしくお願いします。

ドク

 

2番目のStringConcatenateの呼び出しに問題があります。

3つの異なるフォント名を足し合わせているので、有効な結果名はありません。

ロバート

dr.house7:
皆さん、こんにちは。

私は、このコードからstringconcatenateコマンドを使用して、このコードを簡略化しようとしています。

ObjectSetText("uitog1v",StringConcatenate("/\ ", uitog1v, "%"),12, hr1v, DodgerBlue );

をクリックすると、このようになります。

ObjectSetText("uitog1v",StringConcatenate("/TEINC ", uitog1v,"%","/TEINC ", uitog2v,"%","/TEINC ", uitog3v,"%"),12,StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue ).とすることで、このようにすることが可能です。

どなたか助けていただけると幸いです。

よろしくお願いします。

ドク

トレンド_alexcud_v_2men.mq4
 

EAのヘルプが必要...テスターで取引が成立しない

EAを作成しているのですが、何をやっても取引を終了させることができません。取引はうまく開くのですが、決済したいときにEAが決済してくれません。

私のEAコードの一部を掲載しますので、経験豊富なコーダーのどなたかがこの問題の原因を解明してくれるかもしれません。buyTrade' と 'sellTrade' という変数はEA全体に対してグローバルです。

注:私は、ロングでもショートでも、常に1つの取引だけをオープンにしておきたいと思っています。取引は「常にある」ので、ロングのシグナルが来たら、既存のショートはクローズされ、逆もまた然りです。

これはやっていません。この取引は、取引を開始し、さらに取引を開始し...さらに取引を開始し...それらがすべて最終的にストップを打つまで、それらを開き続けています。

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

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

for (int i = OrdersTotal() - 1; i >= 0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);
 

...

これは部分的なコードなので、売り注文を閉じるときにsymBidをsymAskに、買い注文を閉じるときにsymAskをsymBidに置き換えてみてください(終値を反転させると、売りを買値で閉じることができず、買いを売値で閉じることができなくなります)。

outofdebt:
私はEAに取り組んでいますが、何をやっても取引を終了させることができません。取引はうまく開くのですが、決済したいときにEAが決済してくれません。

私のEAコードの一部を掲載しますので、経験豊富なコーダーのどなたかが、この問題の原因を解明してくれるかもしれません。buyTrade'と'sellTrade'という変数はEA全体に対してグローバルです。

注:私は、ロングでもショートでも、常に1つの取引だけをオープンにしておきたいと思っています。取引は「常にある」ので、ロングのシグナルが来たら、既存のショートはクローズされ、逆もまた然りです。

これはやっていません。この取引は、取引を開始し、さらに取引を開始し...さらに取引を開始し...それらがすべて最終的にストップを打つまで、それらを開き続けています。

事前にありがとうございます。

//---- Is there a new signal?

// Buy signal ---------------------------------------

//if(buyTrade==false || sellTrade==false) {

if (STC_VIDYAprev = 10.00) {

if (sellTrade==true) {

for (int i = OrdersTotal() - 1; i >= 0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_BUY )

{ int OldTicket=OrderTicket(); double lots=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );

bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );

}

sellTrade = false;

}

if(buyTrade==false) {

EnterLong(Sym, Lots, "");

buyTrade = true;

}

}

//else

//return(0);

// Sell signal ---------------------------------------

if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {

if (buyTrade==true) {

for (int j = OrdersTotal() - 1; j >= 0; j--) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderType() == OP_SELL )

{ int oldTicket=OrderTicket(); double lotts=OrderLots();}

RefreshRates(); //OrderSelect() needed ?

double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );

bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );

}

buyTrade = false;

}

if(sellTrade==false) {

EnterShrt( Sym, Lots, "");

sellTrade = true;

}

}

//else

//return(0);