コーディングのヘルプ - ページ 161

 

一度に2つの注文

こんにちは、私はEAをコーディングしようとしているのですが、問題が発生しました。

その問題とは、現在 2つの注文(OPENSTOPとSELLSTOP)を開きたいのですが、このEAでは100以上開いてしまうので、どうすれば2つだけ開くように解決できるでしょうか?

extern double Lots=1;

extern double h_beg=10;

extern double h_end=23;

extern double TakeProfit=20;

extern double StopLoss=90;

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

int start()

{

double prevbar_H;

double prevbar_L;

double bar_H;

double bar_L;

double sell;

double buy;

bool trade_time;

bool sell_opened;

bool buy_opened;

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

if (Hour()==h_beg)

{

trade_time = trueです。

for(int h=1; h<=11; h++)

{

bar_H = iHigh(NULL,0,h);

if (prevbar_H==0 || prevbar_H<bar_H)

{

prevbar_H = bar_H;

}

}

for(int l=1; l<=11; l++)

{

bar_L = iLow(NULL,0,l);

if (prevbar_L=0||prevbar_L>bar_L)。

{

prevbar_L = bar_L;

}

}

}

if (Hour()==h_end)

{

trade_time = false;

prevbar_H = 0;

prevbar_L = 0;

DeletePending();

DeleteBUY();

sell=0;

買い=0;

}

//+--------------------------------------------------------buy or sell----------+

if(Hour()==h_beg)

{

if(sell==0)

{

OrderSend(Symbol(),OP_SELLSTOP,Lots,prevbar_L,3,prevbar_L+200*Point,prevbar_L-200*Point, "MA sample",16384,0,Green);

sell=1;

}

if(buy==0)の場合

{

OrderSend(Symbol(),OP_BUYSTOP,Lots,prevbar_H,3,prevbar_H-200*Point,prevbar_H+200*Point, "MA sample",16384,0,Green).を送信します。

buy=1;

}

}

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

return(0);

}

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

void DeletePending()

{

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

{

OrderDelete(OrderTicket())。

}

}

}

void DeleteBUY()

{

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

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

{

if (OrderType() == OP_BUY)

{

OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );

}

}

}

}
 
carbonmimetic:
こんにちは、Mladenです。

もし、2つの安値の間のバーをカウントしたい場合、日曜日の23.00pmから00.00までのバーを避けるにはどうしたらいいでしょうか?

なぜなら、4時間足チャートにはそのバーがあり、1時間しか続かないからです...そして、それは日足チャートにも現れます。

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

カーボンミメティック

このような曜日の チェックを追加します。

if (TimeDayOfWeek(Time[yourCounter])!=0)

0は日曜日で、その場合はそのバーをスキップする必要があります。

 

なぜなら、私が使っているシステムはマーチンゲール取引システムのようなもので、一度注文を出すと、1つの作業注文と4つの保留注文が あり、2番目の保留注文が作業注文になるため、私は現在の注文と同じように前のTPを移動する必要があります。したがって、私はこれを自動的に行うEAを持っていれば、それを見続ける必要はありません。

 
mladen:
カーボンミメティック

このような曜日チェックを追加してください :

if (TimeDayOfWeek(Time[yourCounter])!=0)
0は日曜日で、その場合はそのバーをスキップする必要があります。

OK...どうもありがとうございました

 

こんにちは、mladenです。

ライブチャートで、過去のシグナルラインを 再描画することができますが、MT4メニューのリフレッシュを押すと、ラインの位置が完全に移動します。

この問題は、過去に再描画されない、または自動更新ができない問題を解決することができます。私は、コードの表面的な初心者です。よろしくお願いします。

ファイル:
 
kenwa:
こんにちは、mladenです。

ライブチャートでは、過去のシグナルラインを再描画することができますが、MT4メニューのリフレッシュを押すと、ラインの位置が完全に移動します。

それは内部ループの問題や方法を持っているバーをカウントするようなものですか?私はコードの表面的な初心者に過ぎません。よろしくお願いします。

ケンワ

initを置き換えて、これらで始めてください。

double CCI_idx[];

double CCI_idt[];

int init()

{

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,CCI_idx);

SetIndexBuffer(1,CCI_idt);

return(0);

}

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

//| |

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

int start()

{

int i,counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

for(i=limit;i>=0;i--) CCI_idt = iCCI(abc,0,CCI_Period,applied_price,i);

for(i=limit;i>=0;i--) CCI_idx = iMAOnArray(CCI_idt,Bars,MA_Period,0,MA_Method,i);

return(0);

}

同じバッファをcci値の収集とそれらのcciの平均の保存に使用することはできません - それが再描画の原因でした。また、CCIコールから時間枠の参照を削除しました。もし、マルチタイムフレームモードでも計算したいのであれば、次のように記述しなければなりません。

__________________________

追記:同じアドバイスが、現在のチャートで異なるシンボルを使用する場合にも適用されます。現在のシンボルの変更されたバーの 数は、他のターゲットシンボルのバーの数と全く同じである必要はありません、あなたは再び再塗装効果を得ることができますが、それはそのままにしておいてください。

 

mladenさん、こんにちは。

上記の#1606を参照してください。私は非常に表面的な初心者というか、ほとんど知らないので、あなたの意味を理解することができません。

 
kenwa:
こんにちは、mladenさん、上記の#1606を参照してください、私は非常に表面的な初心者というか、ほとんど知らないので、あなたの意味が理解できません、ここで動作するインジケータを添付することができますか? バッファを二つ使う代わりに、一つのバッファを使ってCCI値を計算し、平均値を計算できますか? 異なるシンボルについて言及しましたが、同じチャート上の二つのシンボルに対応した簡単なバージョンを書くことは可能ですか?

ケンワ

同じバッファを計算バッファとして使用し、そのCCIの平均の結果を同じバッファに格納することはできません - 平均は、過去の値を変更します。

マルチシンボルインジケーター(現在のチャートから他のシンボルにアクセスできるもの)については、その解決策を掲載するとなると、簡単にはいかないと思います。簡単な解決策はありません。まず、2つの異なるシンボルを同時に使用した場合にどうなるかをクリアにする必要があります。

現在のシンボルと現在の時間 枠で正しく動作するバージョンを添付します(iMAOnArray()関数を使用したい場合、cciの平均を計算する方法はこれだけです)。

ファイル:
 

ケンワ

これは、マルチタイムフレームで動作し、任意のシンボルを選択できるようにするための最も簡単な方法でしょう。一見したところ、それほど単純ではないことがわかると思いますが、これは正しいデータを収集し、その際に再描画しないようにするために必要なことをすべて行っています。

 

こんにちは、mladenです。

ところで、2つのバッファを使って計算しているようですが、mt4では最大8つのバッファしか使えないのでしょうか?もし、添付の参考インディケータ(これは決して良いインディケータではありません(内部にバグがあり、ライブではあまり機能しません))のように、参考までに、通貨や外部から自分で入力したいシンボルを必要とせず、同時に8シンボルを表示することができます(同じインディケータをswで重ね合わせると、縦のスケールが固定されていないため機能しないと思います)参考インディケータと同様のcci mtfを作る手助けをお願いできますか(そんなに複雑でなくても、同様の機能を備えて いれば良いですが? 親切に助けて頂き、本当にありがとうございます。

ファイル:
reference.mq4  17 kb