[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 303 1...296297298299300301302303304305306307308309310...652 新しいコメント oper11 2011.10.29 11:44 #3021 costy_: オープンタイムをファイルに記録するなどのオプションもありますが、オープンオーダーをスクロールしてライフタイムを比較 する方が簡単です。一般に、リフレーズ ... 個々のポジションについて、「指定した時間 経過後にすべてのオープンポジションをクローズする必要がある」(私はこのように理解しました)。 回答中の「より簡単に」という言葉がキーワードで、そのような機能は内蔵されていないということです。ただ、個々のポジションを オープンから2時間 後にクローズさせたかった のです。 ALN 2011.10.29 11:51 #3022 costy_: スクリプトはそう簡単にテスターの時間を見つけることはできません(しかし、インジケータは見つけることができます)、あなたはテストアドバイザーを開始するために添付することができます はやくて確実な ありがとうございます。こんな感じでスクリプトで作りました。 datetime time_start=GlobalVariableGet( "Time_test"); // Alert(iBarShift(NULL,0,time_start)); EndBar = iBarShift(NULL,0,time_start); すべてがうまくいく。 Александр 2011.10.29 13:09 #3023 イニカトルを書こうとしている。なぜ再描画されるのか理解できない。それに、レンダリングにしか描画しない。よろしくお願いします。プログラミングは初めてです。 #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 マゼンタ #property indicator_color2 レッド //---- 入力パラメータ extern int N; datetime some_time=D'1971.01.11 00:00'; datetime some_time_1=D'1971.01.11 00:00'; //---- バッファ double RLB_Buffer[]; double RLB_Buffer_1[]; double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1; bool dirlong,first; int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1; //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int init() { 文字列のshort_name。 //---- インジケータライン SetIndexStyle(0, DRAW_ARROW)を設定します。 SetIndexArrow(0, 159)を設定します。 SetIndexBuffer(0,RLB_Buffer)を設定します。 //----; SetIndexStyle(1, DRAW_ARROW)を設定します。 SetIndexArrow(1,159)。 SetIndexBuffer(1,RLB_Buffer_1)を設定。 return(0)です。 } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); コメント(i," ",ii); //---- if(Bars < 3) return(0)です。 //---------- first_t_bar=iBarShift(NULL,0,some_time,false); //バーは上向きトレンド now_bar=iBarShift(NULL,0,TimeCurrent(),false); //最後のバー、右端 i=counted_bars-first_t_bar+1です。 //------------ first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //トレンドの開始バー now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //最後のバー、右端 ii=counted_bars-first_t_bar_1+1です。 // if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; //if(counted_bars), then trend start bar. if(counted_bars == 0) { first = false とする。 i=first_t_bar+1です。 ii=first_t_bar_1+1です。 } //--------------- //マイナスバーのカウント dirlong = falseです。 if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true.の場合。 if(dirlong == true) //トレンドが上向きなら { while(i>=0) { x++; //トレンド開始からのバー数 Real_Line_Balanse=Close[i+5]; //トレンドからのスローの合計のカウント RLB=Real_Line_Balanse。 if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //価格が上がっているときだけラインを表示する。 //------- if(RLB>Close[i]&& x>50) //価格がRLBを上から下へ横切った場合 { bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//HIGH を決定する。 //最後のバーとトレンドの開始 some_time_1=Time[bar_high];//新しい下降トレンドの始まり x=0; //トレンド開始からのバーカウンターをゼロにする Real_Line_Balanse=0; } i--; }//while //------- を使用します。 //--------------------- //--------------------- if(dirlong == false) //下降トレンドの場合 { while(ii>=0) { x1++; //トレンド開始からのバー数 Real_Line_Balanse_1=Close[ii+10]; //トレンドからバーの量をカウントします。 RLB_1=Real_Line_Balanse_1; if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1; //------- if(RLB_1<Close[ii]&& x1>50) //価格がRLBを上から下へ横切った場合 { bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//now の間の LOW を決定する。 //最後のバーとトレンドの開始 some_time=Time[bar_low];//新しい上昇トレンドの始まり x1=0; //トレンド開始からのバーカウンターをゼロにする。 Real_Line_Balanse_1=0; } ii--。 } //while //------- を使用します。 //--------------------- return(0)です。 } //+------------------------------------------------------------------+ [ARCHIVE] Any rookie question, アスク! エリオットウェーブス Александр 2011.10.29 15:56 #3024 これはナンセンスだ。の代わりに i=counted_bars-first_t_bar+1です。 自分でカウントするバーをカウントするデザインを入れました。ALLはスムーズに動き始めた。IndicatorCounted(); が不具合を起こしたり、よくわからない...。 --- 2011.10.29 17:42 #3025 クローズドオーダーのステータスを変数に通知するには? 2 vitaluxa 2011.10.29 21:26 こんにちは。 EAが注文を開き、それがストップロスまたはテイクプロフィットで終了した場合、注文がストップロスまたはテイクプロフィットで正確に終了したことを変数に通知するにはどうすればよいですか?ありがとうございました。 costy_ 2011.10.29 21:25 #3026 001:これはナンセンスだ。の代わりに i=counted_bars-first_t_bar+1です。カウントされたバーそのものをカウントするコンストラクトを入れました。ALL GOODS。IndicatorCounted(); が不具合を起こしたり、よくわからない...。 while(i>=0) を使っているので、新しいローソク足が現れたらi=1(前のローソク足のデータを一度記録したデータでカウントするようにするため) です。なぜsome_time=D'1971.01.11 00:00' を入力し、Bars 、IndicatorCountedを 使用 すると、私のために動作しません(まあ、エラーはおそらく最初の_t_barのせいです)。あなたのアルゴリズムで、修正すべきです。"プログラミング 初心者 "です。"2007年以降)。 Алексей Тарабанов 2011.10.29 23:39 #3027 sergeev: クローズドオーダーのステータスを変数に通知するには? :) + ... ヴィタルーハのために https://docs.mql4.com/ru/trading/OrderStopLoss https://docs.mql4.com/ru/trading/OrderTakeProfit first_may 2011.10.30 05:33 #3028 こんにちは、今年の6月10日から9月22日までの見積書がアップロードできない理由を教えてください。履歴のアップロードを 2~3回行ったが、いずれも同じようにデータにずれが生じている。 oper11 2011.10.30 08:29 #3029 //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Закрвает открытые позиции через 2 суток void DelOldPositions() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderOpenTime()+2*24*60*60 > TimeCurrent()) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4 ),3,Red); } } } } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Помогите поправить 2 последние строки, т.к. в тестере почему-то мгновенно закрывает все открытые позы. С уважением. 削除済み 2011.10.30 09:00 #3030 問題は、EAが常に注文を再開することです。つまり、買いシグナルがあると、注文を開き、利益でそれを閉じ、条件がまだ維持されていると、再び注文を開くのです。 買い注文が開いたらカウンターが+1され、カウンターが0以上にならないと新しい買いが開けない、売りが出たらカウンターが0になる、という従来の売買カウンターで処理できると思っていました。 extern double TakeProfit = 150; extern double Sl = 150; extern double Lots = 0.1; extern int n = 9; //----------------------------------------------------------- int start() { int cnt, ticket, total, i, Buy=0, Sell=0; double x1=iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,0); //красная double x2=iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,0); //синяя double x3=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANA,0); //фиол пунктир double x4=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANB,0); //кр пунктир double x5=iIchimoku(NULL,0,9,26,52,MODE_CHINKOUSPAN,0); //зеленая double x6=Ask; double x61=Bid; double Lot=0; total=OrdersTotal(); for (i=total-1;i>=0;i--) //счетчик выставленных ордеров { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_BUY) { Buy++; } if (OrderType()==OP_SELL) { Sell++; } } } if(total<1)//проверка количества ордеров { if(AccountFreeMargin()<(100*Lots)) { Print("Недостаточно средств = ", AccountFreeMargin()); return(0); } if (x6>x3 && x6>x4 && x1>x2 && x6>x2 && x6<(x2+60) && Buy==0) //бай { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Sl*Point,Ask+TakeProfit*Point,0,0,0,Green); Sell=0; // ордер и обнуление счетчика if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice()); else Print("Ошибка при открытии BUY позиции : ",GetLastError()); } } if (x6<x3 && x6<x4 && x1<x2 && x6<x2 && x6>(x2-60) && Sell==0) //селл { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Sl*Point,Bid-TakeProfit*Point,0,0,0,Red); Buy=0; //сам по себе ордер и обнуление счетчика if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice()); else Print("Ошибка при открытии SELL позиции : ",GetLastError()); } } } if((OrderType()==0 && x61<x3 && x61<x4 && x1>x2 && x1>x3 && x1>x4) || (OrderType()==1 && x61>x3 && x61>x4 && x1<x2 && x1<x3 && x1<x4)) //закрытиеи на развороте { bool result; double price; int cmd,error; //---- if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); if(cmd==OP_BUY || cmd==OP_SELL) { while(true) { if(cmd==OP_BUY) price=Bid; else price=Ask; result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); } else error=0; if(error==135) RefreshRates(); else break; } } } else Print( "Error when order select ", GetLastError()); //---- } } ファイル: robot_ichimoky3.mq4 5 kb 1...296297298299300301302303304305306307308309310...652 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
オープンタイムをファイルに記録するなどのオプションもありますが、オープンオーダーをスクロールしてライフタイムを比較
する方が簡単です。一般に、リフレーズ .
「指定した時間
後にすべてのオープンポジションをクローズする必要がある」(私はこのように理解しました)。
スクリプトはそう簡単にテスターの時間を見つけることはできません(しかし、インジケータは見つけることができます)、あなたはテストアドバイザーを開始するために添付することができます
はやくて確実な
イニカトルを書こうとしている。なぜ再描画されるのか理解できない。それに、レンダリングにしか描画しない。よろしくお願いします。プログラミングは初めてです。
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 マゼンタ
#property indicator_color2 レッド
//---- 入力パラメータ
extern int N;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- バッファ
double RLB_Buffer[];
double RLB_Buffer_1[];
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong,first;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int init()
{
文字列のshort_name。
//---- インジケータライン
SetIndexStyle(0, DRAW_ARROW)を設定します。
SetIndexArrow(0, 159)を設定します。
SetIndexBuffer(0,RLB_Buffer)を設定します。
//----;
SetIndexStyle(1, DRAW_ARROW)を設定します。
SetIndexArrow(1,159)。
SetIndexBuffer(1,RLB_Buffer_1)を設定。
return(0)です。
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
コメント(i," ",ii);
//----
if(Bars < 3)
return(0)です。
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //バーは上向きトレンド
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //最後のバー、右端
i=counted_bars-first_t_bar+1です。
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //トレンドの開始バー
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //最後のバー、右端
ii=counted_bars-first_t_bar_1+1です。
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; //if(counted_bars), then trend start bar.
if(counted_bars == 0)
{
first = false とする。
i=first_t_bar+1です。
ii=first_t_bar_1+1です。
}
//--------------- //マイナスバーのカウント
dirlong = falseです。
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true.の場合。
if(dirlong == true) //トレンドが上向きなら
{
while(i>=0)
{
x++; //トレンド開始からのバー数
Real_Line_Balanse=Close[i+5]; //トレンドからのスローの合計のカウント
RLB=Real_Line_Balanse。
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //価格が上がっているときだけラインを表示する。
//-------
if(RLB>Close[i]&& x>50) //価格がRLBを上から下へ横切った場合
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//HIGH を決定する。
//最後のバーとトレンドの開始
some_time_1=Time[bar_high];//新しい下降トレンドの始まり
x=0; //トレンド開始からのバーカウンターをゼロにする
Real_Line_Balanse=0;
}
i--;
}//while
//-------
を使用します。
//---------------------
//---------------------
if(dirlong == false) //下降トレンドの場合
{
while(ii>=0)
{
x1++; //トレンド開始からのバー数
Real_Line_Balanse_1=Close[ii+10]; //トレンドからバーの量をカウントします。
RLB_1=Real_Line_Balanse_1;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //価格がRLBを上から下へ横切った場合
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//now の間の LOW を決定する。
//最後のバーとトレンドの開始
some_time=Time[bar_low];//新しい上昇トレンドの始まり
x1=0; //トレンド開始からのバーカウンターをゼロにする。
Real_Line_Balanse_1=0;
}
ii--。
} //while
//-------
を使用します。
//---------------------
return(0)です。
}
//+------------------------------------------------------------------+
これはナンセンスだ。の代わりに
i=counted_bars-first_t_bar+1です。
自分でカウントするバーをカウントするデザインを入れました。ALLはスムーズに動き始めた。IndicatorCounted(); が不具合を起こしたり、よくわからない...。
クローズドオーダーのステータスを変数に通知するには?
これはナンセンスだ。の代わりに
i=counted_bars-first_t_bar+1です。
カウントされたバーそのものをカウントするコンストラクトを入れました。ALL GOODS。IndicatorCounted(); が不具合を起こしたり、よくわからない...。
while(i>=0) を使っているので、新しいローソク足が現れたらi=1(前のローソク足のデータを一度記録したデータでカウントするようにするため) です。
なぜsome_time=D'1971.01.11 00:00' を入力し、Bars 、IndicatorCountedを 使用 すると、私のために動作しません(まあ、エラーはおそらく最初の_t_barのせいです)。
あなたのアルゴリズムで、修正すべきです。
"プログラミング 初心者 "です。"2007年以降)。
クローズドオーダーのステータスを変数に通知するには?
:)
+ ...
ヴィタルーハのために
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
問題は、EAが常に注文を再開することです。つまり、買いシグナルがあると、注文を開き、利益でそれを閉じ、条件がまだ維持されていると、再び注文を開くのです。
買い注文が開いたらカウンターが+1され、カウンターが0以上にならないと新しい買いが開けない、売りが出たらカウンターが0になる、という従来の売買カウンターで処理できると思っていました。