コーディングの方法は? - ページ 291 1...284285286287288289290291292293294295296297298...347 新しいコメント dipu 2012.02.25 19:25 #2901 ラストキャンドル詳細 こんにちは。 最後のローソクの高値、安値、始値、終値を表示するインジケータが欲しいのですが... 削除済み 2012.02.27 15:43 #2902 mladen: なぜトレーリングストップを使わないのですか?というのは、あなたのオリジナルのアイデアのほぼ100%(ほとんど)を行うことができ、それははるかに、はるかに簡単にコード化することです。 問題は、(私の表現が正しいか、100%正しいとは思いませんが)ストップは(今のところ)取引全体を通して同じままです。このようなアプローチはどうでしょうか。2つのトレードが開いているとき、コードはオープンオーダーの数をチェックし、それが1以上(基本的には2)であれば、両方のトレードの利食い 額を以前より高い一定額に修正することができるのです。基本的には、ある種のヘッジがここで行われます。 ありがとうございます。 madmax3 Fabian Gryn 2012.02.27 16:16 #2903 [langtitle=pl]EAが開発したプロトタイプ[/langtitle]。 [lang=pl]このようなバグが発生した場合は、次のように対処してください: LevelRSIbuy=20を設定し、LevelRSIsell=80を設定する。 #define SIGNAL_NONE 0 #define SIGNAL_BUY 1 #define SIGNAL_SELL 2 #define SIGNAL_CLOSEBUY 3 #define SIGNAL_CLOSESELL 4 #property copyright "Expert Advisor Builder" (エキスパートアドバイザービルダー) #property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/" extern int MagicNumber = 0; extern bool SignalMail = False; extern bool EachTickMode = True; extern double Lots = 0.1; extern int Slippage = 1; extern bool UseStopLoss = True; extern int StopLoss = 10; extern bool UseTakeProfit = True; extern int TakeProfit = 5; extern bool UseTrailingStop = False; extern int TakeProfit = 5; extern bool UseTrailingStop = False; extern int TrailingStop = 30; 外付けの int LevelRSIbuy=20; extern int LevelRSIsell=80; int BarCount; int Current; bool TickCheck = False; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { BarCount = Bars; if (EachTickMode) Current = 0; else Current = 1; return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { int Order = SIGNAL_NONE; int Total, Ticket; double StopLossLevel, TakeProfitLevel; if (EachTickMode && Bars != BarCount) TickCheck = False; Total = OrdersTotal(); オーダー = SIGNAL_NONE; //+------------------------------------------------------------------+ //| 変数開始 //+------------------------------------------------------------------+ double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); //+------------------------------------------------------------------+ //| 変数終了 //+------------------------------------------------------------------+ //ポジションチェック bool IsTrade = False; for (int i = 0; i < トータル; i ++) { { {オーダーセレクト(i, SELECT_BY_PASS) OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())) { IsTrade = True? IsTrade = Trueです。 if(OrderType() == OP_BUY){ //Close //+------------------------------------------------------------------+ //| シグナル開始(買い終了) //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| シグナル終了(買い終了) //+------------------------------------------------------------------+ if (オーダー == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)) )){ OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy").If(EachTickMode):シグナルを送信します。 if (!EachTickMode) BarCount = Bars; IsTrade = False; を続けます。 } //トレーリングストップ if(UseTrailingStop && TrailingStop > 0) { /トレイリングストップ if(ビッド - 注文開始価格() > ポイント * TrailingStop) { { if(OrderStopLoss() < ビッド - ポイント * トレイリングストップ) { { { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen)を実行します。 if (!EachTickMode) BarCount = Bars; を続けます。 } } } } else { //Close //+------------------------------------------------------------------+ //| シグナル開始(売り終了) //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| シグナル終了(売り終了) //+------------------------------------------------------------------+ if (オーダー == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){ OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell").If(EachTickMode):シグナルを送信します。 if (!EachTickMode) BarCount = Bars; IsTrade = False; を続けます。 } //トレーリングストップ if(UseTrailingStop && TrailingStop > 0) { /トレーリングストップ if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { { { if((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange)を実行します。 if (!EachTickMode) BarCount = Bars; を続けます。 } } } } } } //+------------------------------------------------------------------+ //| Signal Begin(Entry)シグナル //+------------------------------------------------------------------+ if (False) 注文 = SIGNAL_BUY; if (False) Order = SIGNAL_SELL; //+------------------------------------------------------------------+ //| シグナル終了 //+------------------------------------------------------------------+ //買い if (オーダー == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){ if(!IsTrade){。 //フリーマージンチェック if (アカウントフリーマージン() < (1000 * ロット)) { Print("資金がありません。フリーマージン = ", AccountFreeMargin()); return(0); if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0.です。 Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。 if(チケット > 0) { if (オーダーセレクト(チケット、SELECT_BY_TICKET、MODE_TRADES)) { Print("BUY order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy")。 } else { Print("買い注文の開始エラー :", GetLastError()); } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } //売り if (注文 == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))。{ if(!IsTrade){。 //フリーマージンチェック if (アカウントフリーマージン() < (1000 * ロット)) { Print("資金がありません。フリーマージン = ", AccountFreeMargin()); return(0); if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0; if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0.です。 Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。 if(チケット > 0) { if (オーダーセレクト(チケット, SELECT_BY_TICKET, MODE_TRADES)) { Print("SELL order opened : ", OrderOpenPrice()); if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell"); } else { Print("Error opening SELL order :", GetLastError()); } if (EachTickMode) TickCheck = True; if (!EachTickMode) BarCount = Bars; return(0); } } if (!EachTickMode) BarCount = Bars; return(0) } } if (!EachTickMode) BarCount = Bars; return(0); //+------------------------------------------------------------------+[/lang] アスク! ICustom機能 基本的な質問 ... 削除済み 2012.03.03 09:18 #2904 このコードを使って、オープントレードのテイクプロフィットを 増やそうとしています(オープントレードが2つある場合)。 if(total>2) if(OrderType()==OP_BUY) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); if(OrderType()==OP_SELL) OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue); total=OrdersTotal(); とします。 しかし、私はまだそれを動作させることができません、何か提案はありますか? ありがとうございます。 madmax3 dresolo1 2012.03.03 18:24 #2905 1日の取引回数を1回に制限するヘルプ 私はプログラミングの初心者で、MQL4で助けが必要です。私はいくつかのコーダーガイドを勉強し、私の取引戦略に基づいて取引を開始および終了する方法を理解しました。私は1日に1回しか取引を行わないようにしたいと思っています(サーバー時間による)。そこで、オープンオーダーとクローズドオーダーをチェックして、今日オーダーがオープンされたかどうかを確認したいと思います。もし、今日注文が開かれたのであれば、その日の追加注文は開けないようにします。 よろしくお願いします。 Mladen Rakic 2012.03.04 11:27 #2906 このようなことを試してみてください。 bool uniqueOnDay() { datetime startTime = iTime(NULL,PERIOD_D1,Time[0]); datetime endTime = startTime+24*60*PERIOD_D1; for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != MagicNumber) continue; if (OrderOpenTime()endTime) continue; return(false); } return(true); } 現在のシンボルのクローズドオーダーのうち、当日にオープンされたものがあるかどうかをチェックします。もしその日に注文が開設されていれば、false を返し(その日にすでに注文が開設されている)、そうでなければ true を返します(その日に注文が開設されていない)。現在開いている注文はチェックしない(履歴だけ)。なぜなら、1つ以上の注文を開きたいとは思わないだろうし、それは別の方法でチェックされるからだ。使い方は次のようなものです。 if (UniqueOnDay() && CurrentlyOpenedOrders==0) ... PS: これは、あなたのEAがMagicNumberパラメータ(その正確な名前)を持っていると仮定しています。追記:これは日足までの時間枠で動作します。週足や月足チャートではうまくいきません。dresolo1: 私はプログラミング初心者で、MQL4で助けを必要としています。いくつかのコーダーガイドを勉強し、私の取引戦略に基づいて取引を開始し、終了する方法を考え出しました。私は1日に1回しか取引を行わないようにしたいのです(サーバー時間による)。そこで、オープンオーダーとクローズドオーダーをチェックして、今日オーダーがオープンされたかどうかを確認したいと思います。もし、今日注文が開かれたのであれば、その日の追加注文は開けないようにします。助けてください。 コーディングのヘルプ [ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. How to code? 削除済み 2012.03.04 13:39 #2907 [langtitle=pl]関数 TemaをTema(close,period)に変換する[/langtitle] Witam Jeszcze raz bo cos siere zle wkleilo.Jak przekazac wartosc funkcji Tema do Var1.Jak robie tak jak w kodzie ponizej to Var1 jest puste. #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 DarkBlue #property indicator_width1 2 //---- input parameters extern int EMA_period=4; //---- buffers string txt; double TemaBuffer[]; double Ema[]; double EmaOfEma[]; double EmaOfEmaOfEma[]; double Var1; int Var2; int i,limit,limit2,limit3; extern int Apply_To_Price=1; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Var1); SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(2,Ema); SetIndexBuffer(3,EmaOfEma); SetIndexBuffer(4,EmaOfEmaOfEma); IndicatorShortName("TEMA("+EMA_period+")"); switch(Apply_To_Price) { case 1: {txt="Open";break;} case 2: {txt="High";break;} case 3: {txt="Low"; break;} case 4: {txt="Median"; break;} case 5: {txt="Typical"; break;} case 6: {txt="WghtdClose"; break;} default: {txt="Close";} } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- int counted_bars=IndicatorCounted(); if (counted_bars==0) { limit=Bars-1; limit2=limit-EMA_period; limit3=limit2-EMA_period; } if (counted_bars>0) { limit=Bars-counted_bars-1; limit2=limit; limit3=limit2; } for (i=limit3;i>=0;i--) { Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO? // Alert(Var1); } Var2 = dodawanie (2,3); return(0); } double Tema(int Cena, int cykl) { //---- for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i); for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i); for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i); for (i=limit3;i>=0;i--) { TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma; //Alert(TemaBuffer); } return(TemaBuffer); } int dodawanie (int a, int b) { int c; c=a+b; return(c); } How to code? Help with simple custom コーディングのヘルプ Mladen Rakic 2012.03.04 14:12 #2908 こんな感じ(TEMA). もし関数の ようにしたいのであれば、次のようにします。 double workTema[][3]; #define _ema1 0 #define _ema2 1 #define _ema3 2 double iTema(double price, double period, int r, int instanceNo=0) { if (ArrayRange(workTema,0)!= Bars) ArrayResize(workTema,Bars); instanceNo*=3; r = Bars-r-1; // // // // // double alpha = 2.0 / (1.0+period); workTema[r][_ema1+instanceNo] = workTema[r-1][_ema1+instanceNo]+alpha*(price -workTema[r-1][_ema1+instanceNo]); workTema[r][_ema2+instanceNo] = workTema[r-1][_ema2+instanceNo]+alpha*(workTema[r][_ema1+instanceNo]-workTema[r-1][_ema2+instanceNo]); workTema[r][_ema3+instanceNo] = workTema[r-1][_ema3+instanceNo]+alpha*(workTema[r][_ema2+instanceNo]-workTema[r-1][_ema3+instanceNo]); return(workTema[r][_ema3+instanceNo]+3.0*(workTema[r][_ema1+instanceNo]-workTema[r][_ema2+instanceNo])); }[/PHP] インジケータの例も添付しておきます。価格の代わりに値を渡す利点は、この方法で任意の値にテマを適用できることです(それは価格のテマである必要はありません、それは例えば、他の指標のテマであることができます)。 lukibest: ウィタムJeszcze raz bo cos sie zle wkleilo.Jak przekazac wartosc funkcji Tema do Var1.Jak robie tak jak w kodzie ponizej to Var1 jest puste. [PHP] #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 DarkBlue (インジケーターカラー1 ダークブルー) #プロパティ indicator_width1 2 //---- 入力パラメータ extern int EMA_period=4; //---- バッファ 文字列 txt; double TemaBuffer[]; double Ema[]; double EmaOfEma[]; double EmaOfEmaOfEma[]; double EmaOfEmaOfEma[]; double Var1; int Var2; int i,limit,limit2,limit3; extern int Apply_To_Price=1; //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int init() { //---- インジケータ IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE)を設定します。 SetIndexBuffer(0,Var1); SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(2,Ema)を設定します。 SetIndexBuffer(3,EmaOfEma)を設定します。 SetIndexBuffer(4,EmaOfEmaOfEma); SetIndexBuffer(4,EmaOfEma); IndicatorShortName("TEMA("+EMA_period+")")。 スイッチ(Apply_To_Price) { ケース 1: {txt="オープン";break;}。 ケース2 {txt="高値";break;}。 ケース3 {txt="安値";break;}。 ケース4 {txt="中央値"; break;}. ケース5 {txt="標準"; break;}. ケース6 {txt="WghtdClose";ブレーク;}。 デフォルトでは {txt="閉じる";}。 //---- return(0); //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| カスタムインジケーターイテレーション関数 //+------------------------------------------------------------------+ int start() { //---- int counted_bars=IndicatorCounted(); if (counted_bars==0) { limit=Bars-1; limit2=limit-EMA_period。 limit3=limit2-EMA_period。 if (counted_bars>0) { limit=Bars-counted_bars-1; limit2=limit; limit3=limit2。 } for (i=limit3;i>=0;i--) { Var1 = Tema(Apply_To_Price,4); //=========================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA.DLACZEGO? // Alert(Var1); } Var2 = dodawanie (2,3); return(0); } double Tema(int Cena, int cykl) { //---- for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i)。 for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i)。 for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i).FOR(i=制限3;i>=0;i>) for (i=limit3;i>=0;i--) { TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEma; //Alert(TemaBuffer); } return(TemaBuffer); int dodawanie (int a, int b) { int c; c=a+b; return(c); } ファイル: tema.mq4 3 kb How to code? T3 T3 SAMIM 2012.03.04 22:14 #2909 HAMMERコードのヘルプをお願いします こんにちは。 私はmql4で新しく始めています。 以下のインジケータを使ってローソク足で黒と白のハンマーを選ぼうとしています。 しかし、チャート上で時々ローソク足が間違った識別テキストを取得します(白いハンマーキャンドルは黒いハンマーキャンドルとして識別され、その逆も同様です)。 このような場合、どうしたらよいでしょうか。 #property indicator_chart_window int limit; //---- バッファ 文字列ハンマー[200000]; //+------------------------------------------------------------------+ //|CuStom インジケータ 初期化関数 //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| CuStorインジケータの初期化関数です。 //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(hammer,OBJ_TEXT)を実行。 //---- return(0); } //+------------------------------------------------------------------+ //| CuStomインジケータ反復関数|CuStomインジケータ反復関数 //+------------------------------------------------------------------+ int start() { int N int N1; int N2; 文字列のテキスト int counted_bars=IndicatorCounted(); limit=Bars-counted_bars; for(N = 1; N < limit; N++) { hammer[N]= CharToStr(N); N1 = N + 1; N2 = N + 2; //---- //---- エラーの可能性をチェックする if(counted_bars<0)の場合{。 Alert("NO Bars..."); return(-1); } // ハンマーのチェック 白 if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10)) )){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen); } // ハンマーブラックのチェック if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen); } //---- }// ループの終了 return(0); //+------------------------------------------------------------------+ How to code? トレンド指標 [ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you William Snyder 2012.03.04 23:31 #2910 svezir: こんにちは。mql4で新しく始めています。 以下のインジケータを使ってローソク足で黒と白のハンマーを選ぼうとしています。 しかし、チャート上で時々ローソク足が間違った識別テキストを取得します(白いハンマーキャンドルは黒いハンマーキャンドルとして識別され、逆も同様です)。 このような場合、どうしたらよいでしょうか。 #property indicator_chart_window int limit; //---- バッファ 文字列ハンマー[200000]; //+------------------------------------------------------------------+ //| CuStom インジケータ初期化関数 //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ //| CuStorインジケータの初期化関数です。 //+------------------------------------------------------------------+ int deinit() { //---- ObjectsDeleteAll(hammer,OBJ_TEXT)を実行。 //---- return(0); } //+------------------------------------------------------------------+ //| CuStomインジケータ反復関数|CuStomインジケータ反復関数 //+------------------------------------------------------------------+ int start() { int N int N1; int N2; 文字列のテキスト int counted_bars=IndicatorCounted(); limit=Bars-counted_bars; for(N = 1; N < limit; N++) { hammer[N]= CharToStr(N); N1 = N + 1; N2 = N + 2; //---- //---- エラーの可能性をチェックする if(counted_bars<0)の場合{。 Alert("NO Bars..."); return(-1); } // ハンマーのチェック 白 if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10)) )){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen); } // ハンマーブラックのチェック if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){ ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point); ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen); } //---- }// ループの終了 return(0); } //+------------------------------------------------------------------+ こんにちはSvezir。 キャンドルパターン用のこのインジケータは、多分役に立つでしょう。 ファイル: pattern_recognition_master_v3a.mq4 29 kb 1...284285286287288289290291292293294295296297298...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ラストキャンドル詳細
こんにちは。
最後のローソクの高値、安値、始値、終値を表示するインジケータが欲しいのですが...
なぜトレーリングストップを使わないのですか?というのは、あなたのオリジナルのアイデアのほぼ100%(ほとんど)を行うことができ、それははるかに、はるかに簡単にコード化することです。
問題は、(私の表現が正しいか、100%正しいとは思いませんが)ストップは(今のところ)取引全体を通して同じままです。このようなアプローチはどうでしょうか。2つのトレードが開いているとき、コードはオープンオーダーの数をチェックし、それが1以上(基本的には2)であれば、両方のトレードの利食い 額を以前より高い一定額に修正することができるのです。基本的には、ある種のヘッジがここで行われます。
ありがとうございます。
madmax3
[langtitle=pl]EAが開発したプロトタイプ[/langtitle]。
[lang=pl]このようなバグが発生した場合は、次のように対処してください: LevelRSIbuy=20を設定し、LevelRSIsell=80を設定する。
#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder" (エキスパートアドバイザービルダー)
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.1;
extern int Slippage = 1;
extern bool UseStopLoss = True;
extern int StopLoss = 10;
extern bool UseTakeProfit = True;
extern int TakeProfit = 5;
extern bool UseTrailingStop = False; extern int TakeProfit = 5; extern bool UseTrailingStop = False;
extern int TrailingStop = 30;
外付けの int LevelRSIbuy=20;
extern int LevelRSIsell=80;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
オーダー = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| 変数開始
//+------------------------------------------------------------------+
double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Var1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
double Sell1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0); double Buy1_1 = iRSI("EURUSD", PERIOD_M1, 14, PRICE_OPEN, Current + 0);
//+------------------------------------------------------------------+
//| 変数終了
//+------------------------------------------------------------------+
//ポジションチェック
bool IsTrade = False;
for (int i = 0; i < トータル; i ++) { { {オーダーセレクト(i, SELECT_BY_PASS)
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())) { IsTrade = True?
IsTrade = Trueです。
if(OrderType() == OP_BUY){
//Close
//+------------------------------------------------------------------+
//| シグナル開始(買い終了)
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| シグナル終了(買い終了)
//+------------------------------------------------------------------+
if (オーダー == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)) )){
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy").If(EachTickMode):シグナルを送信します。
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
を続けます。
}
//トレーリングストップ
if(UseTrailingStop && TrailingStop > 0) { /トレイリングストップ
if(ビッド - 注文開始価格() > ポイント * TrailingStop) { {
if(OrderStopLoss() < ビッド - ポイント * トレイリングストップ) { { {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen)を実行します。
if (!EachTickMode) BarCount = Bars;
を続けます。
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| シグナル開始(売り終了)
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| シグナル終了(売り終了)
//+------------------------------------------------------------------+
if (オーダー == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell").If(EachTickMode):シグナルを送信します。
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
を続けます。
}
//トレーリングストップ
if(UseTrailingStop && TrailingStop > 0) { /トレーリングストップ
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { { {
if((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange)を実行します。
if (!EachTickMode) BarCount = Bars;
を続けます。
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry)シグナル
//+------------------------------------------------------------------+
if (False) 注文 = SIGNAL_BUY;
if (False) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| シグナル終了
//+------------------------------------------------------------------+
//買い
if (オーダー == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){
if(!IsTrade){。
//フリーマージンチェック
if (アカウントフリーマージン() < (1000 * ロット)) {
Print("資金がありません。フリーマージン = ", AccountFreeMargin());
return(0);
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0.です。
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。
if(チケット > 0) {
if (オーダーセレクト(チケット、SELECT_BY_TICKET、MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy")。
} else {
Print("買い注文の開始エラー :", GetLastError());
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//売り
if (注文 == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))。{
if(!IsTrade){。
//フリーマージンチェック
if (アカウントフリーマージン() < (1000 * ロット)) {
Print("資金がありません。フリーマージン = ", AccountFreeMargin());
return(0);
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0.です。
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。
if(チケット > 0) {
if (オーダーセレクト(チケット, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order :", GetLastError());
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars; return(0) } } if (!EachTickMode) BarCount = Bars;
return(0);
//+------------------------------------------------------------------+[/lang]
このコードを使って、オープントレードのテイクプロフィットを 増やそうとしています(オープントレードが2つある場合)。
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);
if(OrderType()==OP_SELL)
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Ask+((TakeProfit+20)*Point),0,Blue);total=OrdersTotal(); とします。
しかし、私はまだそれを動作させることができません、何か提案はありますか?
ありがとうございます。
madmax3
1日の取引回数を1回に制限するヘルプ
私はプログラミングの初心者で、MQL4で助けが必要です。私はいくつかのコーダーガイドを勉強し、私の取引戦略に基づいて取引を開始および終了する方法を理解しました。私は1日に1回しか取引を行わないようにしたいと思っています(サーバー時間による)。そこで、オープンオーダーとクローズドオーダーをチェックして、今日オーダーがオープンされたかどうかを確認したいと思います。もし、今日注文が開かれたのであれば、その日の追加注文は開けないようにします。
よろしくお願いします。
PS: これは、あなたのEAがMagicNumberパラメータ(その正確な名前)を持っていると仮定しています。
追記:これは日足までの時間枠で動作します。週足や月足チャートではうまくいきません。
私はプログラミング初心者で、MQL4で助けを必要としています。いくつかのコーダーガイドを勉強し、私の取引戦略に基づいて取引を開始し、終了する方法を考え出しました。私は1日に1回しか取引を行わないようにしたいのです(サーバー時間による)。そこで、オープンオーダーとクローズドオーダーをチェックして、今日オーダーがオープンされたかどうかを確認したいと思います。もし、今日注文が開かれたのであれば、その日の追加注文は開けないようにします。助けてください。
[langtitle=pl]関数 TemaをTema(close,period)に変換する[/langtitle]
Witam
Jeszcze raz bo cos siere zle wkleilo.Jak przekazac wartosc funkcji Tema do Var1.Jak robie tak jak w kodzie ponizej to Var1 jest puste.
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue
#property indicator_width1 2
//---- input parameters
extern int EMA_period=4;
//---- buffers
string txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema);
SetIndexBuffer(3,EmaOfEma);
SetIndexBuffer(4,EmaOfEmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")");
switch(Apply_To_Price)
{
case 1:
{txt="Open";break;}
case 2:
{txt="High";break;}
case 3:
{txt="Low"; break;}
case 4:
{txt="Median"; break;}
case 5:
{txt="Typical"; break;}
case 6:
{txt="WghtdClose"; break;}
default:
{txt="Close";}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period;
limit3=limit2-EMA_period;
}
if (counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2;
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=======================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA. DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i);
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i);
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
}
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
こんな感じ(TEMA).
もし関数の ようにしたいのであれば、次のようにします。インジケータの例も添付しておきます。価格の代わりに値を渡す利点は、この方法で任意の値にテマを適用できることです(それは価格のテマである必要はありません、それは例えば、他の指標のテマであることができます)。
ウィタム
Jeszcze raz bo cos sie zle wkleilo.Jak przekazac wartosc funkcji Tema do Var1.Jak robie tak jak w kodzie ponizej to Var1 jest puste.
[PHP]
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DarkBlue (インジケーターカラー1 ダークブルー)
#プロパティ indicator_width1 2
//---- 入力パラメータ
extern int EMA_period=4;
//---- バッファ
文字列 txt;
double TemaBuffer[];
double Ema[];
double EmaOfEma[];
double EmaOfEmaOfEma[]; double EmaOfEmaOfEma[];
double Var1;
int Var2;
int i,limit,limit2,limit3;
extern int Apply_To_Price=1;
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int init()
{
//---- インジケータ
IndicatorBuffers(5);
SetIndexStyle(0,DRAW_LINE)を設定します。
SetIndexBuffer(0,Var1);
SetIndexBuffer(1,TemaBuffer); SetIndexBuffer(1,TemaBuffer);
SetIndexBuffer(2,Ema)を設定します。
SetIndexBuffer(3,EmaOfEma)を設定します。
SetIndexBuffer(4,EmaOfEmaOfEma); SetIndexBuffer(4,EmaOfEma);
IndicatorShortName("TEMA("+EMA_period+")")。
スイッチ(Apply_To_Price)
{
ケース 1:
{txt="オープン";break;}。
ケース2
{txt="高値";break;}。
ケース3
{txt="安値";break;}。
ケース4
{txt="中央値"; break;}.
ケース5
{txt="標準"; break;}.
ケース6
{txt="WghtdClose";ブレーク;}。
デフォルトでは
{txt="閉じる";}。
//----
return(0);
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| カスタムインジケーターイテレーション関数
//+------------------------------------------------------------------+
int start()
{
//----
int counted_bars=IndicatorCounted();
if (counted_bars==0)
{
limit=Bars-1;
limit2=limit-EMA_period。
limit3=limit2-EMA_period。
if (counted_bars>0)
{
limit=Bars-counted_bars-1;
limit2=limit;
limit3=limit2。
}
for (i=limit3;i>=0;i--)
{
Var1 = Tema(Apply_To_Price,4); //=========================TUTAJ JEST PROBLEM W VAR1 NIC NIE MA.DLACZEGO?
// Alert(Var1);
}
Var2 = dodawanie (2,3);
return(0);
}
double Tema(int Cena, int cykl)
{
//----
for (i=limit;i>=0;i--) Ema=iMA(NULL,0,cykl,0,MODE_EMA,Cena,i)。
for (i=limit2;i>=0;i--) EmaOfEma=iMAOnArray(Ema,0,cykl,0,MODE_EMA,i)。
for (i=limit3;i>=0;i--) EmaOfEmaOfEma=iMAOnArray(EmaOfEma,0,cykl,0,MODE_EMA,i).FOR(i=制限3;i>=0;i>)
for (i=limit3;i>=0;i--)
{
TemaBuffer=3*Ema-3*EmaOfEma+EmaOfEma;
//Alert(TemaBuffer);
}
return(TemaBuffer);
int dodawanie (int a, int b)
{
int c;
c=a+b;
return(c);
}
HAMMERコードのヘルプをお願いします
こんにちは。
私はmql4で新しく始めています。 以下のインジケータを使ってローソク足で黒と白のハンマーを選ぼうとしています。 しかし、チャート上で時々ローソク足が間違った識別テキストを取得します(白いハンマーキャンドルは黒いハンマーキャンドルとして識別され、その逆も同様です)。 このような場合、どうしたらよいでしょうか。
#property indicator_chart_window
int limit;
//---- バッファ
文字列ハンマー[200000];
//+------------------------------------------------------------------+
//|CuStom インジケータ 初期化関数
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| CuStorインジケータの初期化関数です。
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT)を実行。
//----
return(0);
}
//+------------------------------------------------------------------+
//| CuStomインジケータ反復関数|CuStomインジケータ反復関数
//+------------------------------------------------------------------+
int start()
{
int N
int N1;
int N2;
文字列のテキスト
int counted_bars=IndicatorCounted();
limit=Bars-counted_bars;
for(N = 1; N < limit; N++) {
hammer[N]= CharToStr(N);
N1 = N + 1;
N2 = N + 2;
//----
//---- エラーの可能性をチェックする
if(counted_bars<0)の場合{。
Alert("NO Bars...");
return(-1);
}
// ハンマーのチェック 白
if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10)) )){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// ハンマーブラックのチェック
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
}// ループの終了
return(0);
//+------------------------------------------------------------------+
こんにちは。
mql4で新しく始めています。 以下のインジケータを使ってローソク足で黒と白のハンマーを選ぼうとしています。 しかし、チャート上で時々ローソク足が間違った識別テキストを取得します(白いハンマーキャンドルは黒いハンマーキャンドルとして識別され、逆も同様です)。 このような場合、どうしたらよいでしょうか。
#property indicator_chart_window
int limit;
//---- バッファ
文字列ハンマー[200000];
//+------------------------------------------------------------------+
//| CuStom インジケータ初期化関数
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| CuStorインジケータの初期化関数です。
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectsDeleteAll(hammer,OBJ_TEXT)を実行。
//----
return(0);
}
//+------------------------------------------------------------------+
//| CuStomインジケータ反復関数|CuStomインジケータ反復関数
//+------------------------------------------------------------------+
int start()
{
int N
int N1;
int N2;
文字列のテキスト
int counted_bars=IndicatorCounted();
limit=Bars-counted_bars;
for(N = 1; N < limit; N++) {
hammer[N]= CharToStr(N);
N1 = N + 1;
N2 = N + 2;
//----
//---- エラーの可能性をチェックする
if(counted_bars<0)の場合{。
Alert("NO Bars...");
return(-1);
}
// ハンマーのチェック 白
if (((Close[N1]>Open[N1]) && ((Open[N1]-Low[N1])>=2*(Close[N1]-Open[N1])) && ((High[N1]-Close[N1])<=(Open[N1]-Low[N1])*0.10)) )){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "WHmr", 9, "Times New Roman", LawnGreen);
}
// ハンマーブラックのチェック
if (((Close[N1]=2*(Open[N1]-Close[N1])) && ((High[N1]-Open[N1])<=(Close[N1]-Low[N1])*0.10))){
ObjectCreate(hammer[N], OBJ_TEXT, 0, Time[N1], Low[N1] - Point);
ObjectSetText(hammer[N], "BHmr", 9, "Times New Roman", LawnGreen);
}
//----
}// ループの終了
return(0);
}
//+------------------------------------------------------------------+こんにちはSvezir。
キャンドルパターン用のこのインジケータは、多分役に立つでしょう。