MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1656 1...164916501651165216531654165516561657165816591660166116621663...1953 新しいコメント Artis98 2021.10.09 15:12 #16551 MakarFX, 試してみました - 変化なし、買い時のみ開き、売り時は完全に無視されます......。 Tretyakov Rostyslav 2021.10.09 15:15 #16552 artem artem #: MakarFX, 試してみました - 変化なし、買い時のみ開き、売り時は完全に無視されます......。 したがって、ブールを切り替える条件はないという結論になる Artis98 2021.10.09 15:16 #16553 では、条件を作るには何を加えればいいのでしょうか? Tretyakov Rostyslav 2021.10.09 15:25 #16554 artem artem #: この条件に何を加えればいいのか。 ロジックを説明する... 最初のものは明確です:シグナルがあり、注文が開いていない... ...そして、どのような条件で注文を開始または終了すべきかを理解していません。 Tretyakov Rostyslav 2021.10.09 15:42 #16555 artem artem #: では、条件を作るには何を加えればいいのでしょうか? お試しください //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Определение направления пересечения мувингов if (Init) InitMetod(); // Трейлинг стоп открытых позиций if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа if(CheckForOpen()==0) // Если сигнал для покупок { if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) { Order=false; OrderBuy=true; OrderSell=false; Print("BUY OK"); } } if(CheckForOpen()==1) // Если сигнал для продаж { if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) { Order=false; OrderBuy=false; OrderSell=true; Print("SELL OK");} } } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ int CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res=-1, buy=0, sell=0; // Считывание параметров индикаторов 3 свечи (4ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 2 свечи (3ей) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 1 свечи (2ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} // Считывание параметров индикаторов 0 свечи (1ой) malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0); if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} if(buy ==4 && OrderSell) res=0; if(sell==4 && OrderBuy) res=1; return(res); } //+------------------------------------------------------------------+ Artis98 2021.10.09 15:46 #16556 では、具体的に、そして溢れないように、順を追って説明していきますね...。 ピュリア法」と呼ばれるトレンドトレード戦略がベースになっています。3本の移動平均線とMACDのバー・オープニングのクロスに基づくものです。周期(75)と(85)の2つのスロー、LowにLinear Weighted Methodを適用した。周期(5)の高速平均、指数法、Closeに適用されます。パラメータが15/26/1のMACDインディケータ。エントリーポイントは、2本の遅い移動平均とMACDバーが速いものと関連するゾーンに開くことによって形成されます(速いものとMACDバーが同じゾーンにあるべきです)。 買いシグナル - MA(5)がクロスし、MA(75)とMA(85)の両方を上回り、MACDバーがプラス圏で開いている状態。 売りシグナル - MA(5)が交差し、MA(75)とMA(85)の両方を下回り、MACDはマイナス領域にオープンバーを持つ。 EAは固定利益とストップロスを配置します。利益とストップの大きさは、初期パラメータに設定されています。注文はテイクプロフィットまたはストップロスに達したときにのみクローズされます。 これは、オリジナルのピュリア・エキスパート・アドバイザーにあったものです。さらに、最新バージョンでは、トレーリングストップや特定の時間帯までに取引するオプションも用意されています。関数は便利ですが、今はあまり興味がありません。 さて、実は、どんな追加をしたのか/したいのか。 1.取引開始と すべてのインジケータ条件(2つのスロー(75)(85)の高速(5)を越え、高速(5)と同じ方向のMACDバーの開始)を確認 するために、新しいローソクの開始価格 (各30分ローソクの最初のティック )のみで 実行しました。これはすでに対応済みです。 指標の「ゼロ化」のための 条件を整備する。例えば、こんな感じです。 はやいもの勝ちです (5) スローより高ければ-、それは買いのシグナルです。その後、下降してそのいずれかに触れるか、あるいは低速の(75)と(85) の間にある 場合、高速のインジケータからの信号はいわば「ゼロ」であり、低速のものに触れるか間にある 限り、この 「ゼロ」 位置に留まることになる。その後、 高速のものが低速のものを両方片側に 交差 した場合(低速のものに触れる前に元の側に戻った場合も含む)、このインディケータのシグナルと なる。 MACDの場合も同じような状況です-MACD=0だけが "ゼロ "とみなさ れます(最初のキャンドルでMACDは、例えば、0.0043で開かれ、0.0010で 2番目のキャンドルで、それは2番目のキャンドルでMACDが "ゼロ" と新しいシグナルを与えていることを意味します)。しかし、 fast(5)とMACDがある意味「対等 」であるべき 時期があります。(5)がslowに対して位置を変えず、MACDが前のローソク足では間違ったゾーンで開き(ノーエントリー)、次のローソク足ではfastと同じゾーンで開いたなら、すべての条件が収束して、注文へのエントリーが発生すべきなのです。これはすべてローソクの始値だけで、この1ティックだけで あることに注意してください。 そして最後に、Expert Advisorに4つの連続したローソク足のオープンを待た せるために、 1. 1回目の始値 - (5) 上記 (75) と (85) + MACDバーが0を超えてオープン -4回中1回確認; 2.2本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中2 回の確認は; 3本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中3回の確認は; 4.ローソクの始値は、(5)と(85)の間に、"0 "を超えた。4本目のローソク足の始値 - (5)が(75)と(85)を超える + MACDバーが0より上に開く- 4本中4本がイエス- 同じローソク足で買い取引を開始(4日)。 売り 注文と同じ状況で、唯一の他の方向で指標を開く必要があります。そして、重要なポイントがあります -例えば、1番目のキャンドルから4番目の任意の段階で、 指標は、その位置を 変更 した場合(例えば、3番目のオープニングキャンドルで、MACDバーは0以下のいずれか、または= 0を開く) -シグナルは連続4キャンドルオープニングでテストを通過していないため、すべてがリセット されます。 なんとなく、不明な点、疑問点があれば、質問してください。 リバーシング: 聖杯や危険な妄想? 市場変動およびその予測の統計分析 リバーシング: エントリポイントを形式化し、裁量トレードアルゴリズムを開発する Tretyakov Rostyslav 2021.10.09 16:02 #16557 artem artem #:OK、順番に説明していきますね、具体的に、溢れないように...。 指標を「ゼロに する」ための条件を整える。 これがゼロイングです。 if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;} if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;} 私が正しく理解していないのかもしれませんが......。 スクリーンショットを撮ってみる Artis98 2021.10.09 16:19 #16558 スクリーンショットを添付しましたので、わからないことがありましたら、ご質問ください。 ファイル: g9cguyokx_wpm_uu10g.png 72 kb Tretyakov Rostyslav 2021.10.09 16:29 #16559 artem artem #: スクリーンショットを添付しましたので、わからないことがあれば聞いてください。 了解です、考えておきます。 削除済み 2021.10.09 16:40 #16560 artem artem #: スクリーンショットを添付しましたので、ご不明な点はお問い合わせください。 これを試してみてください - そういう場所でも開くのでしょうか? //+------------------------------------------------------------------+ //| artem artem.mq4 | //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //--- #define MagicNumber 122122 //--- #include <stdlib.mqh> // Стандартная библиотека //--- input string s0 = "Баланс"; // 1 input string Template = "ADX"; // Имя шаблона(without '.tpl') input double TargetProfit = 1000000; // Баланс + Прибыль(прибавить к балансу) input double TargetLoss = 0; // Баланс - Убыток(отнять от баланса) input string s1 = "Размер лота"; // 2 input double Lot = 0.01; // размер лота 0 - авт.расчет input string s2 = "TP SL"; // 3 input double InpTProfit = 1000; // Exchange TP input double InpStopLoss = 1000000; // Exchange SL input string s3 = "Индикатор"; // 4 input int MovingPeriodLw = 13; // MovingPeriodLw input int MovingPeriodS1 = 89; // MovingPeriodS1 input int MovingPeriodS2 = 144; // MovingPeriodS2 input string s4 = "Day & Hour"; // 5 input int HrStart = 0; // время начала торговли input int HrEnd = 23; // время окончания торговли //+------------------------------------------------------------------+ int Monday = 1; // Понедельник 1 вкд. 0 выкл. int Tuesday = 1; // Вторник int Wednesday = 1; // Среда int Thursday = 1; // Четверг int Friday = 1; // Пятница //+------------------------------------------------------------------+ uint SLEEPTIME=1; double Price[2]; datetime timeprev=0; ENUM_TIMEFRAMES TimeFrame= PERIOD_CURRENT; bool OrderBuy=false,OrderSell=false,Order=false,Init=true,ClOp=true; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- Закрыть Общий профит или профит на паре if(ProfitTarget()) { return; } //--- Закрыть профит BUY или SELL на паре ProfitOnTick(); // Определение направления пересечения мувингов if(Init) InitMetod(); // Ожидание нового бара на графике if(timeprev == Time[0]) return; timeprev = Time[0]; // Открытие ордера по методу Пуриа CheckForOpen(); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() // Открытие ордера по методу Пуриа { double malw,mas1,mas2,macd; int res; // Считывание параметров индикаторов malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); // Проверяем положение мувмнгов if(malw>mas1 && malw>mas2 && OrderSell) { OrderBuy=true; OrderSell=false; Order=true; } if(malw<mas1 && malw<mas2 && OrderBuy) { OrderBuy=false; OrderSell=true; Order=true; } // Открываем ордер Buy if(macd>0 && OrderBuy && Order) { res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,3,0,0,"",MagicNumber,0,Blue); Order=false; return; } // Открываем ордер Sell if(macd<0 && OrderSell && Order) { res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,3,0,0,"",MagicNumber,0,Red); Order=false; return; } } //+------------------------------------------------------------------+ //| Init metod Puria function | //+------------------------------------------------------------------+ void InitMetod() // Опредеоение начального пересечения мувингов { double malw,mas1,mas2; malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0); mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0); mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0); if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2)) { Init=false; OrderBuy=true; OrderSell=true; } return; } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double Lots() // Расчет объема лота { double Lots; if(Lot > 0) return(Lot); Lots=AccountFreeMargin()/5000; Lots=MathMin(15,MathMax(0.01,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); } //+------------------------------------------------------------------+ // Permission to trade in this day | //+------------------------------------------------------------------+ bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли { bool dtrade = false; switch(DayOfWeek()) { case 1: // Monday if(Monday == 1) dtrade = true; break; case 2: // Tuesday if(Tuesday == 1) dtrade = true; break; case 3: // Wednesday if(Wednesday == 1) dtrade = true; break; case 4: // Thursday if(Thursday == 1) dtrade = true; break; case 5: // Friday if(Friday == 1) dtrade = true; break; default: // dtrade = false; break; } if(dtrade && !(Hour() >= hmin && Hour() <= hmax)) dtrade = true; return dtrade; } //+------------------------------------------------------------------+ //| Check for long position closing | //+------------------------------------------------------------------+ bool ProfitTarget(void) { bool res=false; if(AccountInfoDouble(ACCOUNT_EQUITY)<=TargetLoss || AccountInfoDouble(ACCOUNT_EQUITY)>=TargetProfit) { CloseAllOrders(); Sleep(SLEEPTIME*1000); CloseAllOrders(); ExpertRemove(); DeleteChart(); PlaySound("expert.wav"); res=true; } //--- result return(res); } //+------------------------------------------------------------------+ //| Check for long position closing | //+------------------------------------------------------------------+ bool ProfitOnTick(void) { bool res=false; double PROFIT_BUY=0.00; double PROFIT_SELL=0.00; for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of open positions { if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol()) { if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) { PROFIT_BUY=PROFIT_BUY+NormalizeDouble(OrderProfit(),2); } if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) { PROFIT_SELL=PROFIT_SELL+NormalizeDouble(OrderProfit(),2); } } } int Close_ticketb=0; int totalb=OrdersTotal(); int b = 0; for(b = totalb; b >=0; b--) { if(OrderSelect(b,SELECT_BY_POS) && OrderSymbol()==Symbol()) { //OrderSelect(i,SELECT_BY_POS); if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) { if(PROFIT_BUY<-InpStopLoss || PROFIT_BUY>=InpTProfit) { Close_ticketb = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),5); PlaySound("ok.wav"); } } } res=true; } int Close_tickets=0; int totals=OrdersTotal(); int s = 0; for(s = totals; s >=0; s--) { if(OrderSelect(s,SELECT_BY_POS) && OrderSymbol()==Symbol()) { if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) { if(PROFIT_SELL<-InpStopLoss || PROFIT_SELL>=InpTProfit) { Close_tickets = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),5); PlaySound("ok.wav"); } } } res=true; } //--- result return(res); } //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void CloseAllOrders(void) { int iOrders=OrdersTotal()-1, i; if(ClOp) { for(i=iOrders; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() && !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],0)) Print(OrderError()); if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderDelete(OrderTicket())) Print(OrderError()); } } } } //+------------------------------------------------------------------+ //| Function..: OrderError | //+------------------------------------------------------------------+ string OrderError(void) { int iError=GetLastError(); return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",iError," ",ErrorDescription(iError))); } //+------------------------------------------------------------------+ //| Function..: GetMarketInfo | //+------------------------------------------------------------------+ bool GetMarketInfo(void) { RefreshRates(); Price[0]=MarketInfo(OrderSymbol(),MODE_ASK); Price[1]=MarketInfo(OrderSymbol(),MODE_BID); double dPoint=MarketInfo(OrderSymbol(),MODE_POINT); if(dPoint==0) return(false); return(Price[0]>0.0 && Price[1]>0.0); } //+------------------------------------------------------------------+ //| start function | //+------------------------------------------------------------------+ void DeleteChart(void) { long currChart,prevChart=ChartFirst(); int i=0,limit=100; bool errTemplate; while(i<limit) { currChart=ChartNext(prevChart); if(TimeFrame!=PERIOD_CURRENT) { ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame); } errTemplate=ChartApplyTemplate(prevChart,Template+".tpl"); if(!errTemplate) { Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError()); } if(currChart<0) break; Print(i,ChartSymbol(currChart)," ID =",currChart); prevChart=currChart; i++; } } //+------------------------------------------------------------------+ 1...164916501651165216531654165516561657165816591660166116621663...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MakarFX, 試してみました - 変化なし、買い時のみ開き、売り時は完全に無視されます......。
この条件に何を加えればいいのか。
ロジックを説明する...
最初のものは明確です:シグナルがあり、注文が開いていない...
...そして、どのような条件で注文を開始または終了すべきかを理解していません。
では、条件を作るには何を加えればいいのでしょうか?
お試しください
では、具体的に、そして溢れないように、順を追って説明していきますね...。
ピュリア法」と呼ばれるトレンドトレード戦略がベースになっています。3本の移動平均線とMACDのバー・オープニングのクロスに基づくものです。周期(75)と(85)の2つのスロー、LowにLinear Weighted Methodを適用した。周期(5)の高速平均、指数法、Closeに適用されます。パラメータが15/26/1のMACDインディケータ。エントリーポイントは、2本の遅い移動平均とMACDバーが速いものと関連するゾーンに開くことによって形成されます(速いものとMACDバーが同じゾーンにあるべきです)。
EAは固定利益とストップロスを配置します。利益とストップの大きさは、初期パラメータに設定されています。注文はテイクプロフィットまたはストップロスに達したときにのみクローズされます。
これは、オリジナルのピュリア・エキスパート・アドバイザーにあったものです。さらに、最新バージョンでは、トレーリングストップや特定の時間帯までに取引するオプションも用意されています。関数は便利ですが、今はあまり興味がありません。
さて、実は、どんな追加をしたのか/したいのか。
1. 1回目の始値 - (5) 上記 (75) と (85) + MACDバーが0を超えてオープン -4回中1回確認;
2.2本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中2 回の確認は;
3本目のローソク足の始値-(5)が(75)を超え(85)+MACDバーが0より上に開いた- 4回中3回の確認は;
4.ローソクの始値は、(5)と(85)の間に、"0 "を超えた。4本目のローソク足の始値 - (5)が(75)と(85)を超える + MACDバーが0より上に開く- 4本中4本がイエス- 同じローソク足で買い取引を開始(4日)。
なんとなく、不明な点、疑問点があれば、質問してください。
OK、順番に説明していきますね、具体的に、溢れないように...。
これがゼロイングです。
私が正しく理解していないのかもしれませんが......。
スクリーンショットを撮ってみる
スクリーンショットを添付しましたので、わからないことがあれば聞いてください。
スクリーンショットを添付しましたので、ご不明な点はお問い合わせください。
これを試してみてください - そういう場所でも開くのでしょうか?