バージョン1.105: OpenBuyとOpenSellの分離関数を導入。
| シンボル別買い始値|
//+------------------------------------------------------------------+
bool OpenBuy(const double lot)
{
bool res=false;
double price=m_symbol.Ask();
double tp=m_symbol.NormalizePrice(m_symbol.Bid()+InpTP*m_adjusted_point);
if(m_trade.Buy(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
//+------------------------------------------------------------------+
//| シンボルで売りポジションを建てる|
//+------------------------------------------------------------------+
bool OpenSell(const double lot)
{
bool res=false;
double price=m_symbol.Bid();
double tp=m_symbol.NormalizePrice(m_symbol.Ask()-InpTP*m_adjusted_point);
if(m_trade.Sell(lot,m_symbol.Name(),price,0.0,tp))
if(m_trade.ResultDeal()>0)
res=true;
return(res);
}
いつものように問題は、ぶら下がったままになっている不採算ポジションをどうするかということだ。以下はバージョン1.105の例です:

OnTradeTransaction(TakeProfitポジションのクローズが検出されたとき)において、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:

シングル・テストは「Every Tick Based on Real Tick」モードのみで行われたことを思い出してください。
両バリアントとも10000からスタート。どちらのバリアントを選択するか - それはあなたの特定の目標に依存すると思います。
少なくとも1つのポジションがTPを受信した場合、すべてのポジションをクローズするオプションがあります。
この場合、次のようになります:
最初に2つの多方向のポジションを持ち、そのうちの1つがTakeProfitを取得した後、すべてのポジションを決済します(つまり、残りのポジション(不採算のポジション)を決済します)。その結果、TakeProfitで利益を得ると同時に、2つ目のポジションで損失を出すことになります。
これはあまり良いことではありません。
この場合、次のようになる:
最初に2つの多方向ポジションを持ち、1つはTakeProfitを取得し、それらすべてを決済する(つまり、残りの1つ(利益のない方)を決済する)。その結果、TakeProfitで利益を得ると同時に、2つ目のポジションで損失を出す。
これはあまりよくない。
私はこのうちの1つを持っていますが、マーチンは最低2つ+成功したエントリーでなければなりません。
主な問題は、成功したエントリーの合計が失敗したエントリーの合計の半分以上になるようなエントリーを見つけることです。
クロスでなければ、0.01から8ニーで十分である。
理論
1) 0.01の注文を2つ、シグナルに従って異なる方向に出す。
2) 価格が利益までの必要な距離を通過した場合、テイクを伴うリフィル、リフィルの数、ニーとテイクのステップ - あなたは長い間これで遊ぶことができます。
私は2番目のオプション(...)を残すことに決めました。OnTradeTransaction (TakeProfitによるポジションのクローズが検出された場合)で、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:)
ウラジーミルKarputov、2017.01.22 19:00
いつものように問題 - ぶら下がった不採算ポジションをどうするか?以下はバージョン1.105の例です:

OnTradeTransaction(TakeProfitポジションのクローズが検出されたとき)で、最も収益性の低いポジションを検索し、この最も収益性の低いポジションをクローズします:

シングルテストは「Every Tick Based on Real Tick」モードでのみ実施されていることをお伝えしておきます。
両バリアントとも10000からスタート。どちらのバリアントを選択するか - 私はそれがあなたの特定の目標に依存すると思います。
現在バージョン1.106
バージョン1.007 - ターミナルの再起動に対する保護:
if(!RefreshRates())
return;
if(m_first)
{
//--- 端末の再起動を防ぐ:
int total=0;
for(int i=PositionsTotal()-1;i>=0;i--) // オープンポジションの数を返す
if(m_position.SelectByIndex(i)) // プロパティにさらにアクセスするために、インデックスによって位置を選択する。
if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
total++;
//--- このExpert Advisorによって取引口座に既にポジションがオープンされている場合。
//--- というわけで、すでに初回だったと思われるように変数を初期化する。
if(total>0)
{
bln_buy=true;
bln_sell=true;
m_first=false;
return;
}
if(OpenBuy(InpLot))
bln_buy=true;
if(OpenSell(InpLot))
bln_sell=true;
m_first=false;
}
//---
ターミナルが再起動された場合、またはEAが再コンパイルされた場合で、EAがすでに指定された取引口座で ポジションをオープンしている場合、「初回実行」の状況が発生しないようになりました。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索


New Martin:
New Martinエキスパートアドバイザーは起動時に2つの反対方向のポジションを開きます。OnTradeTransaction処理。決済指値がトリガされると、同じ方向のポジション(1つ)が開かれます。2つのMA指標の交差は、より大きなロットのポジションを開くためのシグナルです。
作者: Vladimir Karputov