今回は、PipShakerOne_2019のコードを説明しながら、売買ロジック・アルゴリズムを解説します。
PipShakerOne_2019は過去記事【PipShakerOne】でダウンロードできます。
PipShakerOne_2019の解説
PipShakerOne_2019のコードを見てみるぞい!
#property version "1.00" #property strict enum t_type {Buy, Sell}; extern string _txt_00_ = ""; // --- 全般設定 --- extern double Slippage = 1.0; extern string PosComment = "PipShaker"; extern int MagicNumber = 777; extern double TrailingPips = 5.0; extern double StopLoss = 200; extern double ProfitTarget = 30.0; extern double Spacing = 5.0; extern string _txt_10_ = ""; // --- 第一取引設定 --- extern datetime Datetime_1stEntry = D'2019.01.01 09:00'; extern t_type TradeType_1stEntry = Buy; extern string _txt_20_ = ""; // --- ロット設定 --- extern double MaxLotSize = 1.0; extern double LotSize = 0.01; extern double LotIncrement = 0.01; extern double MaxTotalLots = 6.0; extern string _txt_30_ = ""; // --- 移動平均線設定 --- extern ENUM_TIMEFRAMES TrendTimeFrame = PERIOD_CURRENT; extern int TrendPeriod = 200; int entry_cnt = 0; double g_point; // 1pipの値 int g_lot_digit; // ロット小数桁数 int OnInit() { g_point = Point; if (Digits % 2 == 1) { g_point *= 10; Slippage *= 10; } double lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); if(NormalizeDouble(lotstep, 3) <= 0.001) g_lot_digit = 3; else if(NormalizeDouble(lotstep, 2) <= 0.01) g_lot_digit = 2; else if(NormalizeDouble(lotstep, 1) <= 0.1) g_lot_digit = 1; else g_lot_digit = 0; return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { int i; double sl, ts; // Check Positions :::::::::::::::::::::::::::::::::::::::: double lowest_buy = 0; double highest_buy = 0; double lowest_sell = 0; double highest_sell = 0; int highest_ticket_buy = 0; int lowest_ticket_buy = 0; int highest_ticket_sell = 0; int lowest_ticket_sell = 0; double highest_profit_buy = 0; double lowest_profit_buy = 0; double highest_profit_sell = 0; double lowest_profit_sell = 0; int pos_cnt_buy = 0; int pos_cnt_sell = 0; double total_lots_buy = 0; double total_lots_sell = 0; double plus_profit_buy = 0; double plus_profit_sell = 0; for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) return; if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; double profit = OrderProfit() + OrderSwap() + OrderCommission(); if (OrderType() == OP_BUY) { if (highest_buy == 0 || OrderOpenPrice() > highest_buy) { highest_buy = OrderOpenPrice(); highest_ticket_buy = OrderTicket(); highest_profit_buy = profit; } if (lowest_buy == 0 || OrderOpenPrice() < lowest_buy) { lowest_buy = OrderOpenPrice(); lowest_ticket_buy = OrderTicket(); lowest_profit_buy = profit; } pos_cnt_buy++; total_lots_buy += OrderLots(); if (profit > 0.0) plus_profit_buy += profit; } if (OrderType() == OP_SELL) { if (highest_sell == 0 || OrderOpenPrice() > highest_sell) { highest_sell = OrderOpenPrice(); highest_ticket_sell = OrderTicket(); highest_profit_sell = profit; } if (lowest_sell == 0 || OrderOpenPrice() < lowest_sell) { lowest_sell = OrderOpenPrice(); lowest_ticket_sell = OrderTicket(); lowest_profit_sell = profit; } pos_cnt_sell++; total_lots_sell += OrderLots(); if (profit > 0.0) plus_profit_sell += profit; } } // exit ::::::::::::::::::::::::::::::::::::::::::::::::::: // 買いポジションのみ保有 if (pos_cnt_sell == 0 && pos_cnt_buy > 1) { if (plus_profit_buy - MathMax(0, highest_profit_buy) >= ProfitTarget) { CloseWin(highest_ticket_buy); return; } } // 売りポジションのみ保有 if (pos_cnt_buy == 0 && pos_cnt_sell > 1) { if (plus_profit_sell - MathMax(0, lowest_profit_sell) >= ProfitTarget) { CloseWin(lowest_ticket_sell); return; } } // mid point 算出 double high_point = MathMax(highest_buy, highest_sell); double low_point = lowest_buy; if (lowest_sell > 0 && (low_point == 0 || low_point > lowest_sell)) low_point = lowest_sell; double mid_point = (high_point + low_point) * 0.5; if (Ask > mid_point) if (lowest_profit_sell < 0) if (plus_profit_buy + plus_profit_sell + lowest_profit_sell >= ProfitTarget) if (OrderSelect(lowest_ticket_sell, SELECT_BY_TICKET) == true) if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), (int)Slippage, clrYellow) == true) CloseWin(); if (Bid < mid_point) if (highest_profit_buy < 0) if (plus_profit_buy + plus_profit_sell + highest_profit_buy >= ProfitTarget) if (OrderSelect(highest_ticket_buy, SELECT_BY_TICKET) == true) if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), (int)Slippage, clrYellow) == true) CloseWin(); // Trailing if (TrailingPips > 0 && pos_cnt_buy + pos_cnt_sell == 1) { for (i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue; if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; sl = NormalizeDouble(OrderStopLoss(), Digits); if (OrderType() == OP_BUY) { ts = NormalizeDouble(Bid - TrailingPips * g_point, Digits); if (ts >= OrderOpenPrice() && (sl == 0 || sl < ts)) if( OrderModify(OrderTicket(), OrderOpenPrice(), ts, OrderTakeProfit(), 0, clrRed) == false) Print("OrderModify error."); } if (OrderType() == OP_SELL) { ts = NormalizeDouble(Ask + TrailingPips * g_point, Digits); if (ts <= OrderOpenPrice() && (sl == 0 || sl > ts)) if( OrderModify(OrderTicket(), OrderOpenPrice(), ts, OrderTakeProfit(), 0, clrRed) == false) Print("OrderModify error."); } } } // Check entry signal :::::::::::::::::::::::::::::::::::::::: int sign = 0; // 1st entry signal if (pos_cnt_buy + pos_cnt_sell == 0 && TimeCurrent() >= Datetime_1stEntry && entry_cnt == 0) { if (TradeType_1stEntry == Buy) sign = 1; if (TradeType_1stEntry == Sell) sign = -1; } // add pos signal if (pos_cnt_buy + pos_cnt_sell > 0) { double ma_0 = iMA(Symbol(), TrendTimeFrame, TrendPeriod, 0, MODE_LWMA, PRICE_CLOSE, 0); double ma_1 = iMA(Symbol(), TrendTimeFrame, TrendPeriod, 0, MODE_LWMA, PRICE_CLOSE, 1); if (ma_1 < ma_0) { if (entry_cnt == 1 && pos_cnt_sell > 0) { highest_buy = highest_sell + (Ask-Bid); lowest_buy = highest_sell + (Ask-Bid); } if (Ask < lowest_buy - Spacing * g_point || Ask > highest_buy + Spacing * g_point) sign = 1; } if (ma_1 > ma_0) { if (entry_cnt == 1 && pos_cnt_buy > 0) { highest_sell = highest_buy - (Ask-Bid); lowest_sell = highest_buy - (Ask-Bid); } if (Bid < lowest_sell - Spacing * g_point || Bid > highest_sell + Spacing * g_point) sign = -1; } // 買いポジ1つの場合 上昇時エントリーしない if (pos_cnt_buy == 1 && pos_cnt_sell == 0 && Ask > highest_buy) sign = 0; // 売りポジ1つの場合 下落時エントリーしない if (pos_cnt_buy == 0 && pos_cnt_sell == 1 && Bid < lowest_sell) sign = 0; } // entry ::::::::::::::::::::::::::::::::::::::::::::::::::: // Buy Entry if (sign == 1) { sl = 0; if (StopLoss > 0) sl = Ask - StopLoss * g_point; double lots = NormalizeDouble(LotSize + LotIncrement * pos_cnt_buy, g_lot_digit); if (lots == 0.0) lots = NormalizeDouble(LotSize, g_lot_digit); if (lots > MaxLotSize) lots = MaxLotSize; if (total_lots_buy + lots <= MaxTotalLots) if (OrderSend(Symbol(), OP_BUY, lots, Ask, (int)Slippage, sl, 0, PosComment, MagicNumber, 0, clrBlue) > 0) entry_cnt++; } // Sell Entry if (sign == -1) { sl = 0; if (StopLoss > 0) sl = Bid + StopLoss * g_point; double lots = NormalizeDouble(LotSize + LotIncrement * pos_cnt_sell, g_lot_digit); if (lots == 0.0) lots = NormalizeDouble(LotSize, g_lot_digit); if (lots > MaxLotSize) lots = MaxLotSize; if (total_lots_sell + lots <= MaxTotalLots) if (OrderSend(Symbol(), OP_SELL, lots, Bid, (int)Slippage, sl, 0, PosComment, MagicNumber, 0, clrRed) > 0) entry_cnt++; } } void CloseWin(int exclude_ticket = 0) { RefreshRates(); for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) continue; if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderTicket() == exclude_ticket) continue; if (OrderProfit() + OrderSwap() + OrderCommission() > 0.0) if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), (int)Slippage, clrYellow) == false) Print("OrderClose error."); } }
ほぇ~・・・
パラメーター
次の表にあるパラメーターを設置しています。
— 全般設定 — | |
---|---|
Slippage | 許容スリッページ(単位:Pips) |
PosComment | ポジションコメント | MagicNumber | マジックナンバー |
TrailingPips | トレーリングストップ(単位:Pips) |
StopLoss | SL値(単位:Pips) |
ProfitTarget | 目標利益(単位は口座の通貨) |
Spacing | エントリー間隔(単位:Pips) |
— 第一取引設定 — | |
Datetime_1stEntry | 最初のエントリーの日時 |
TradeType_1stEntry | 最初のエントリーの売買指定(Buy/Sell) |
— ロット設定 — | |
MaxLotSize | 最大ロット数 |
LotSize | 最初のエントリーのロット数 |
LotIncrement | 買い増し売り増し時のロット増加数 |
MaxTotalLots | 売買別 ロット数合計の上限 |
— 移動平均線設定 — | |
TrendTimeFrame | 移動平均の時間足 |
TrendPeriod | 移動平均の期間 |
グローバル変数
グローバル変数には、エントリー回数・1pipの値・ロット数小数以下桁数を格納する変数を宣言しています。
int entry_cnt = 0; double g_point; // 1pipの値 int g_lot_digit; // ロット小数桁数
OnInit()関数内の処理
OnInit()関数内で、グローバル変数g_pointとg_lot_digitにそれぞれ値を格納しています。
g_point = Point; if (Digits % 2 == 1) { g_point *= 10; Slippage *= 10; } double lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); if(NormalizeDouble(lotstep, 3) <= 0.001) g_lot_digit = 3; else if(NormalizeDouble(lotstep, 2) <= 0.01) g_lot_digit = 2; else if(NormalizeDouble(lotstep, 1) <= 0.1) g_lot_digit = 1; else g_lot_digit = 0;
保有ポジション状況確認
OnTick()関数内の最初に、保有ポジション状況を確認して買いポジションと売りポジションそれぞれの次の情報を取得しています。
- 取得価格の最高値・最安値
- 取得価格の最高値・最安値の注文番号
- 取得価格の最高値・最安値の損益額
- ポジション数
- 合計ロット数
- プラス損益の利益合計
片側ポジションのみ保有時の決済処理
買いポジションのみ保有または売りポジションのみ保有の場合の決済を次のようにしています。CloseWin()関数に注文番号を渡すとそのポジションは決済対象から除外されるようにしています。
// 買いポジションのみ保有 if (pos_cnt_sell == 0 && pos_cnt_buy > 1) { if (plus_profit_buy - MathMax(0, highest_profit_buy) >= ProfitTarget) { CloseWin(highest_ticket_buy); return; } } // 売りポジションのみ保有 if (pos_cnt_buy == 0 && pos_cnt_sell > 1) { if (plus_profit_sell - MathMax(0, lowest_profit_sell) >= ProfitTarget) { CloseWin(lowest_ticket_sell); return; } }
ここで「plus_profit_buy – MathMax(0, highest_profit_buy)」は、highest_profit_buyがプラス損益の場合にのみplus_profit_buyからその利益分を差し引く計算になります。
取得価格の中心を求める
売買区別なく、エントリー価格の最高値と最安値の中心を次のように求めています。
double high_point = MathMax(highest_buy, highest_sell); double low_point = lowest_buy; if (lowest_sell > 0 && (low_point == 0 || low_point > lowest_sell)) low_point = lowest_sell; double mid_point = (high_point + low_point) * 0.5;
相殺決済処理
現在値から一番遠くにあるマイナス損益のポジションを、プラス損益のポジション群で相殺決済をするようにしています。
if (Ask > mid_point) if (lowest_profit_sell < 0) if (plus_profit_buy + plus_profit_sell + lowest_profit_sell >= ProfitTarget) if (OrderSelect(lowest_ticket_sell, SELECT_BY_TICKET) == true) if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), (int)Slippage, clrYellow) == true) CloseWin(); if (Bid < mid_point) if (highest_profit_buy < 0) if (plus_profit_buy + plus_profit_sell + highest_profit_buy >= ProfitTarget) if (OrderSelect(highest_ticket_buy, SELECT_BY_TICKET) == true) if (OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), (int)Slippage, clrYellow) == true) CloseWin();
トレーリングストップ処理
保有ポジションが1つの場合にトレーリングストップ機能が発動するようにしています。
if (TrailingPips > 0 && pos_cnt_buy + pos_cnt_sell == 1)
{
// 中略
}
第一エントリーのシグナル判定
第一エントリーのシグナル判定を次のようにしています。PipShakerOneは、第一エントリーを一度だけにしています。
if (pos_cnt_buy + pos_cnt_sell == 0 && TimeCurrent() >= Datetime_1stEntry && entry_cnt == 0) { if (TradeType_1stEntry == Buy) sign = 1; if (TradeType_1stEntry == Sell) sign = -1; }
追加エントリーのシグナル判定
ポジション保有時の追加エントリーのシグナルを次のようにMAの方向とSpacingで判定しています。
if (pos_cnt_buy + pos_cnt_sell > 0) { double ma_0 = iMA(Symbol(), TrendTimeFrame, TrendPeriod, 0, MODE_LWMA, PRICE_CLOSE, 0); double ma_1 = iMA(Symbol(), TrendTimeFrame, TrendPeriod, 0, MODE_LWMA, PRICE_CLOSE, 1); if (ma_1 < ma_0) { if (entry_cnt == 1 && pos_cnt_sell > 0) { highest_buy = highest_sell + (Ask-Bid); lowest_buy = highest_sell + (Ask-Bid); } if (Ask < lowest_buy - Spacing * g_point || Ask > highest_buy + Spacing * g_point) sign = 1; } if (ma_1 > ma_0) { if (entry_cnt == 1 && pos_cnt_buy > 0) { highest_sell = highest_buy - (Ask-Bid); lowest_sell = highest_buy - (Ask-Bid); } if (Bid < lowest_sell - Spacing * g_point || Bid > highest_sell + Spacing * g_point) sign = -1; } if (pos_cnt_buy == 1 && pos_cnt_sell == 0 && Ask > highest_buy) sign = 0; if (pos_cnt_buy == 0 && pos_cnt_sell == 1 && Bid < lowest_sell) sign = 0; }
エントリー処理
signが1の時に買い注文、-1の時に売り注文をするようにしています。注文が通ったらentry_cntに1を足しています。
if (sign == 1) { // 買いエントリー処理 中略 if (OrderSend(Symbol(), OP_BUY, lots, Ask, (int)Slippage, sl, 0, PosComment, MagicNumber, 0, clrBlue) > 0) entry_cnt++; } if (sign == -1) { // 売りエントリー処理 中略 if (OrderSend(Symbol(), OP_SELL, lots, Bid, (int)Slippage, sl, 0, PosComment, MagicNumber, 0, clrRed) > 0) entry_cnt++; }
あとがき
サラッと解説しただけなので、分からないところがあったらコメントで聞いてください^^;
相殺決済処理などいろいろとカスタマイズすると面白そうですね^^
では、このへんで。
なかなかソースを見る時間がなかったのですが、説明文と並べて一通り眺めさせていただきました。
自分の理解力では、まだ理解出来ない部分が多々あります。
買い売り共に、それぞれ最大で2つづつボジションをとって、利益で損失を相殺する感じなんですかね?
利益が出ない場合はストップロスまで保有するんですよね?
RefreshRate()と言う関数と、CloseWin()関数でif(OrderCloseTime()==0)とあるのは何をしているのでしょうか?
あと、バックテストを行うと1日分しか行わないのは何故でしょうか?
あれこれ聞いて、すいませんm(__)m
えぎさん
こんばんは。
RefreshRate()とif(OrderCloseTime()==0)は
PipMakerV9-1の流れをそのまま使っています。
詳しくは分かりませんが、
RefreshRate()はレートの再読込み、
if(OrderCloseTime()==0)は、まだクローズされていないことを確認しております。
無くてもバックテストでのパフォーマンスは変わりませんが、if(OrderCloseTime()==0)をなくした場合、時々エラー表示があるので、一応つけているといった感じです^^;
PipShakerの取引方法はリスクが高く、
PipShakerOneは、エントリ→ポジションが無くなったら終了という1回こっきりのEAにしてあります。
//TrendSign
のブロックの
if(BuyOrders + SellOrders =Date1 && trade1==false)
{
if (buy0sell1==0) TrendSign=1;
if (buy0sell1==1) TrendSign=-1;
}
の部分のエントリ条件を変えると、
取引を続けるEAに改造できるかと思います。
また、気づいた点とかございましたら、何でもいってくださいね!
早速のご返答、ありがとうございます。
なるほど。
if(OrderCloseTime()==0)は、まだクローズされていないこと、ですか。
なるほどなるほど。
if(BuyOrders + SellOrders =Date1 && trade1==false)
{
if (buy0sell1==0) TrendSign=1;
if (buy0sell1==1) TrendSign=-1;
}
上記は最初のエントリーのときの判断ですよね?
で、2度目以降のエントリーは移動平均で・・・と思っていたのですが、違うのですか?
最初のエントリーのみランダム的に買いか売りかを選んでエントリーし、その後は移動平均でエントリーシグナルを得てポジションを持つものだと思っていました。
・・・どうもまだ理解出来ていないようです・・・。
えぎさん
おはようございます。
ポジションがあるときのエントリーは移動平均で・・・といった感じです。
保有ポジションが無くなったら、また最初の条件のところで判断する感じですね!
PipShakerOneは、パラメータでエントリの条件を設定していますが、それを変更し、
trade1==false
という条件も無くせば、次のエントリもするようになるかと思います。
おはようございます。
ポジションがあるときのエントリーは移動平均なのに、最初のエントリーがランダムエントリーなのは何か理由があるのでしょうか?
最初のエントリーも移動平均にしたら、エントリーの条件がひとつになるのでロジック的にスッキリするのでは?
と考えたのですが、これも素人考えですかねw
なにか理由があるのであれば、まさに素人丸出しで恥ずかしい限りですが・・・w
えぎさん
PipShakerV4では、エントリーは移動平均とその他フィルタを用いてエントリしています。
しかし、リスクが大きい取引方法ですので、
単発バージョンを作ったという感じです^^;
なるほど…。
と言うことは、通常バージョンは常にポジションをとり続ける訳ですね?
では、取引する時間帯を決めてみたり、取引の条件を絞り込んだりしたら、ほどほどの頻度の取引量でエントリーやエグジットを行いませんかね?
素人な意見ですが(笑)。
えぎさん
そういうことです!
では、自分もソースを元にイジらせていただこうと思います。
自分の技術力で出来るか、が問題ですね(・∀・)
久しぶりに書き込みさせていただきます。
楽しみに拝見させていただいているのですが,知らぬ間に頭をかかえることが多くなってきてます(笑)
質問なのですが,一定期間(20日程度)におけるEAの損益を取得する関数というのは作ることが可能でしょうか?
該当口座の全損益を取得する方法はあると思うのですが,一定期間の損益を取得するとなると,検討がつかなくなっています。
もし可能でしたら,どんな風になるのか教えていただけると非常にありがたいのですが・・・。
図々しいお願いになると分かっていますが,よろしくお願いします。
simanamioさん
おはようございます。
チョット調べてみますので、少しお待ちくださいね!
また、具体的に例えばどんな状況で使う感じなのか教えていただければ、イメージしやすいかと思いますので、よろしくお願い致します^^;
こんばんわ
いきなりのお願いをしてしまい,申し訳ありません。
実は,ブログ中の記事に紹介されていた「ランダムエントリー」を調べていて,非常に強いショックを受けました。仕掛けよりも,損切りの設定やポジションサイジングの方が重要。ということかなと思いました。
多くのEAでは,次の視点からマネージメント機能を付加しているようです。
1 証拠金の何パーセントをリスクにさらすか
2 直近のトレードで連続してn回負けたらロット数を下げる
ではEAの損益カーブをもとにしてポジションサイジングをすることができるとしたら,どうなるんだろう?というのが疑問の発端です。
一定期間におけるEAの収益をもとに「n日前の元本に対する,本日までn日間の損益」を指数として算出することができれば,次のような資金管理をすることが可能になるかと思います。
・ 一定のドローダウンをしていることをエントリーの条件にする(逆バリ思考)。
・ EAの損益カーブが右肩上がりの場合のみトレードする(順バリ思考)。
・ 損益指数が一定以上の場合はいったん手じまいする。
マルチロット系ではなく,トレンドフォロー・カウンタートレード用のマネージングになるかと思いますが,発想の是非を含めて意見やお知恵を拝借できたら幸いです。
simanamioさん
こんばんわ。
そうなると、やはり変数または、ファイルで
仮取引履歴を作り、そこから損益カーブを導き出す感じですかね。
確率論で行くと、
過去の勝敗によって次の取引の勝率が変わることは無いらしいのですが、
システムの調子に偏りがあるのならば、有効かもですね!
慶次さん
>変数または、ファイルで仮取引履歴を作り・・・
やはりそれ以外の方法はないみたいですネ
外部データを参照するようなEAともなると,MT4偏差値の低い僕には,もはやお手上げです(>_<)
エクセルだと期間中のドローダウンや損益指数を出すことはそれほど難しい作業ではないのですが,MT4・VT・エクセル,いずれも得意な分野があるということみたいですね。
>過去の勝敗によって次の取引の勝率が変わることは無いらしい・・・
そう言われてみると,統計学上はそうなるように思います。
だとすると有効性に疑問が沸いてきました(あらら・・)
ちなみにエクセルで作ったシステムについて,「損益指数が一定値以下になった場合にのみトレードを開始する」という条件を手作業で実施したところ,トレード回数は減少,最大DDは減少,トータル収益は多少増といった現象が見られました。
複利運用する場合,「最大DDの減少」は非常においしいテーマになると思っているので,今回書き込みをさせていただいたような感じです。
ただ,その結果も,ロジックが違うシステムで実験すると違う結果を出すかも知れません。お手を煩わせる前に,もう少し手作業で実験してみないといけませんね。
場合によっては,「「MT4のバックテストデータをエクセルに渡して手作業で分析する」方法を効率化する。」というのもありかも知れませんし,いろいろやってみて,何か気づいたことがあったら,書き込みさせていただきたいと思ってます。
simanamioさん
おはようございます。
最大DDは減少,トータル収益は多少増は魅力的ですね!
MT4のバックテストデータをエクセルに渡して手作業で分析する方法はとても有効ですよね!EAでコード化して出力するより、分かりやすく融通が利くので私もそうしてます。
良い結果が出るといいですね!応援してます!
御無沙汰しています!
最近の調子は、いかがですか!
私は10point3の改良と、逆張スキャルと、トレンド系デイトレの3本立てで研究しています。
PipShakerの調子はいかがですか!
0.01Lotでしたら損切りせずに耐えられそうな感じもしますが、損切りを積極的にすべきかが研究課題になりそうですね。。
良い結果が出ることをお祈りしています! (^-^)
最近、Bogie等のニューラルネットワーク系を研究されている方がいると思いますが、慶次さんは、どう思われますか。
詳しいことは把握していないのですが、過去のデータを分析して未来を予測?しているのかと思ったのですが。。
トレンドの流れに乗っていくより効率的なのかな?と思っているのですが、うまく対応しているのでしょうか。。
最新のトレード法を研究することは良いことですよね!
良い情報がありましたら交換しあえると幸いです!
それには、私も勉強しなくては。。(^-^)
マーサーさん
おひさしぶりです!
去年のEAチャンピオンシップでトップがニューラルネットワーク系のEAでしたので、注目がされているのでしょうか^^;
PipShakerは、前に作ったEAでQQEを使ったものが順調に利益が出ているようです。
逆張りでは、最近出た商材の体験版で解析を試みていますが、ロジックはわからないですーー;
研究がんばりましょうね!
PipShakerのアルゴリズムこのEAは内容としてはどんな取引するのですか。
しろうとさん
コメントありがとうございます。
ナンピンEAです。テスターのビジュアルモードでご確認頂くと解りやすいかと思います。
PipShakerのアルゴリズムこのEAは 損切 リカクはどちらともEAがするのでしょうか
ポジ持った時リカクの数字でなかったのですが
デモ取引してますがターミナルに表示最初なかったもので。後からリカク表示EAが判断して
表示するのでしょうか。
PipShakerのアルゴリズムこのEAは時間足 5分にしても15分にしても1時間足に
しても時間足で取引内容は変わるのですか。
何度も質問すみませんPipShakerのアルゴリズムこのEAは
移動平均線は何日の移動平均線で取引しますか。
移動平均線のクロスで取引するのでしようか。