Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к...
Стандартная сетка графика имеет ряд особенностей, не позволяющих с одного взгляда определить движение цены котировки: шаг сетки динамически меняется при переключении таймфрейма, шаг не привязан к базовым уровням, например к 1.12000, как на скриншоте ниже. Скрипт Price Lines размечает уровни цен на графике и служит дополнением к сетке графика...
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+PositionGetDouble(POSITION_PROFIT);
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
elseif(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+PositionGetDouble(POSITION_PROFIT);
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool ProfitOnTick(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
elseif(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit) // if the profitif(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
inputint limit_total_symbol = 3; // Кол-во Позиции при Убыткеinputdouble TargetOpenLot = 1000000; // Убыток на Позиции Открыть Позицию
今回のバージョンはこんな感じです - テスターにて
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotBuy(void)
{
bool res=false;
double PROFIT_BUY=0.00;
CloseTikB=iClose(NULL,Period(),0);
OpenTikB=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikB<CloseTikB)
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetOpenLot)
ExtNeedOpenBuy=true;
if(LongObjOpened())
return(res);
}
res=true;
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotSell(void)
{
bool res=false;
double PROFIT_SELL=0.00;
CloseTikS=iClose(NULL,Period(),0);
OpenTikS=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikS>CloseTikS)
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetOpenLot)
ExtNeedOpenSell=true;
if(ShortObjOpened())
return(res);
}
res=true;
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotBuy(void)
{
bool res=false;
double level;
double PROFIT_BUY=0.00;
PROFIT_BUY=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
if(PROFIT_BUY<-TargetStopLoss || PROFIT_BUY>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_BUY,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool CloseLotSell(void)
{
bool res=false;
double level;
double PROFIT_SELL=0.00;
PROFIT_SELL=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---if(m_position.Symbol()==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
if(PROFIT_SELL<-TargetStopLoss || PROFIT_SELL>=TargetTakeProfit)
{
if(FreezeStopsLevels(level))
ClosePositions(POSITION_TYPE_SELL,level);
}
}
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotBuy(void)
{
bool res=false;
double PROFIT_BUY=0.00;
CloseTikB=iClose(NULL,Period(),0);
OpenTikB=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikB<CloseTikB)
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_BUY<-TargetOpenLot)
{
double price=m_symbol.Ask();
for(uint y=0; y<maxLimits; y++)
{
//--- open positionif(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,InpLots,price,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price,0.0);
}
res=true;
}
}
}
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for long position closing |//+------------------------------------------------------------------+bool OpenLotSell(void)
{
bool res=false;
double PROFIT_SELL=0.00;
CloseTikS=iClose(NULL,Period(),0);
OpenTikS=iOpen(NULL,Period(),0);
//---int total=PositionsTotal(); // количество открытых позицийfor(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positionsif(m_position.SelectByIndex(i)) // selects the position by index for further access to its propertiesif(m_position.Symbol()==m_symbol.Name())
{
if(total>0)
{
ulong position_ticket=PositionGetTicket(total-1); // тикет позиции
}
if(total<limit_total_symbol)// количество открытых позиций
{
if(OpenTikS>CloseTikS)
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Commission()+m_position.Swap()+m_position.Profit();
if(PROFIT_SELL<-TargetOpenLot)
{
double price0=m_symbol.Bid();
for(uint y=0; y<maxLimits; y++)
{
if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_SELL,InpLots,price0,0.0,0.0))
printf("Position by %s to be opened",m_symbol.Name());
else
{
printf("Error opening SELL position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
printf("Open parameters : price=%f,TP=%f",price0,0.0);
}
res=true;
}
}
}
}
}
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+
この機能は、損益からポジションをオープン します。
UtilityCommand.mq5でアシスタントインジケータを作りましたが、線が動き、そこからコマンドを設定 することが可能です。SEMで 構築しました
私はhttps://www.mql5.com/ru/code/16269 それがmt4スクリプトであることが判明し、私は作者Alexey Volchanskiyに 感謝します。
https://www.mql5.com/ru/code/16269 このスクリプトはmt4から判明しました 作者のAlexey Volchanskiyに 感謝します
mt4だけでなくmt5用のスクリプトもあります。https://www.mql5.com/ru/code/16262 私はIndicatorでそれをマスターしています。
損益計算書機能を変更しました#property version "1.013"
に達すると、すべてを閉じて削除し、開いているすべてのウィンドウを指定されたパターンに変更します。
#property version "1.014"
それでも、Profit from Balanceは必要な機能です - 1つのExpert Advisorが複数のペアで動作する場合。
他のペアに影響を与えることなく、指定されたペアでクローズするために、Profit and Lossを再設計しました。
損益、 1000000設定に金額(例えばあなたの通貨の1単位)を書き込みます - それはあなたの通貨の 100万を取るまで、それはポジションを閉じません
#property version "1.014"
それでも、バランスからの利益は必要な機能です - 1 Expert Advisorは、複数のペアで動作する場合。
Profit and Lossをこのペアでクローズし、他のペアに影響を与えないように再設計しました。
P&L機能では、金額(例えばお客様の通貨1単位)を1000000に設定します -お客様の 通貨を 100万通貨取るまでポジションを閉じません。
#property version "1.015"
少し固定、この関数(利益と損失) - 1つのペアに、あなたはいくつかのポジションを開くことができますので、1つの方法 - 今、合計金額を閉じます、1つの位置がプラスとマイナスで他のことができますが、合計金額は、設定で指定された量と等しく なります。
----------------------
以下は、機能(Profit & Loss)です。
#property version "1.015"
固定(Profit & Loss)-1つの通貨ペアで複数のポジションを建てることができ、合計金額で決済されます。あるポジションが利益を上げ、別のポジションがマイナスになることがありますが、合計金額は設定で指定した金額と同じに なります。
----------------------
以下は、関数(Profit and Loss)です。
実際の口座で試したところ、2つの建玉を 小さく利食いしたかったので、160に設定して、一番大きなマイナスポジションを決済してくれると思っていたのですが、そうではありませんでした。
一番負けているポジションを決済するのかと思ったらそうではなく、160の利益が出た方を決済し、両方のポジションを決済してしまい、私はカモにされました。最初のオープンポジションから、マイナスポジションを足して計算しなければならないことが判明しました
#property version "1.015"
固定(Profit & Loss)-1つの通貨ペアで複数のポジションを建てることができ、合計金額で決済されます。あるポジションが利益を上げ、別のポジションがマイナスになることがありますが、合計金額は設定で指定した金額と同じに なります。
----------------------
以下はその機能です(Profit & Loss)。
#property version "1.016"
いろいろな方法を試しましたが、これしかないようです。金額を一度に設定すると、多くのポジションを建てた場合、同じ金額で決済されます。
以下は、この機能を少し変えたものです。
#property version "1.016"
いろいろと試しましたが、これしかないでしょう。一度に設定すると、多くのポジションを建てた場合、その金額で決済されます。
以下は、少し変わった機能です。
テスターでこの機能を確認しました。利益300、損失10000に設定しました。 オープンはEURUSD H1のインディケータ(LeMan_BrainTrend1Sig)から、レバレッジ100、0.01ロットのバランスで来ました。
通貨の機能利益損失 - BUYとSELLは、同じペアで独自の利益を持っている、(例えば、BUYが利益を 作った場合、それは彼らのポジションを閉じます、それは利益を作ったまで、SELLは閉じません)。
テスターで確認したところ、利益300、損失10000とし、EURUSD H1、残高100、レバレッジ100、ロット0.01でインジケーター(LeManBrainTrend1Sig)を使用してオープンしました。
通貨の機能利益損失 - BUYとSELLは、同じペアで自分の利益を持って、(例えば、BUYが利益を作った 場合、それは自分のポジションを閉じます、彼らは自分の利益に到達するまで、SELLは閉じません)。
さらに1つの機能が追加されました。端末でリアルタイムに確認すればいいだけなんですけどね。
今回のバージョンはこんな感じです - テスターにて
もう一つの機能が追加されました。ただ、端末でリアルタイムに確認する必要があります。
このバージョンはそうです - テスター再生で
悪くない機能だと思います。あちこちに行って、利益を得て、どうでもよくなってしまうのです。
しかし、コードには若干の調整が必要です。 うまくいっています。