double GetLotSize()
{
double Ls=0;
datetime last = 0, openTime;
for (int pos=OrdersTotal()-1;pos>=0;pos--)
{
if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
if(GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+int CountOrders()
{
int cnt=0;
int i=OrdersTotal()-1;
for(int pos=i;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==_Symbol)
{
if(OrderMagicNumber()==Magic) cnt++;
}
}
}
return(cnt);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if(openPrice< Open[1] && openPrice > Close[1])
return(true);
return(false);
}
if (bSignalBuy()) {
if (GetLotSize() > LotControl)
vOrderOpenSell();
else
vOrderOpenBuy();
}
それでも、同じティックに2つの異なる指示のポジションを開くのですか?そんなはずはない!
double GetLotSize()
{
double Ls=0;
datetime last = 0, openTime;
for (int pos=OrdersTotal()-1;pos>=0;pos--)
{
if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
if ((openTime = OrderOpenTime()) > last) {
last = openTime;
Ls = OrderLots();
}
}
}
}
}
return Ls;
}
このコードについては、何も変わっていないのかもしれません。注文は終値で実行されるため。
アルゴリズムをできるだけ整理する。
voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.// Если нет открытых ордеров, то входим в условиеif(CountOrders()==0)
{
if(GetLotSize()>LotControl) {openPrice = dMA + deviation * _Point;}
else
openPrice = dMA;
//Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit// if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)// {// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка// CloseOrder();// }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
}
こんにちは。
どこを間違えたか確認してください(うまくいきません)
買いシグナルを偏差値で ずらしたい* _Point(設定で設定)if(GetLotSize()>LotControl)
LotControl - 設定でも設定されています。
GetLotSize() - 推奨通り。
ありがとうございます。 なぜか効果がありませんでした。
ありがとうございました。なぜか効果がありませんでした。
と書きました。
それでも、同じティックに2つの異なる指示のポジションを開くのですか?そんなはずはない!
このコードについては、何も変わっていないのかもしれません。注文は終値で実行されるため。
アルゴリズムをできるだけ整理する。
この場合、買いシグナルと売りシグナルでエントリーしており、それ以上のことはできません。ここでうまくいかないかもしれないことは?入退室機能がない...。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
マカーFX さん 2021.12.02 18:30
この中には何が入っているのでしょうか?本質的なところは何も変わっていないんですね。OrderCloseTimeの呼び出しを増やしただけですね。コードを1行に引き伸ばした。そして、読みにくくなってしまった。しかし、結果はやはり同じです。
ここはどうでしょう?本質的なところは何も変わっていないんですね。OrderCloseTimeの呼び出しを増やしただけですね。しかし、結果は同じです。
目を見開く
スタジオで議論してください
スタジオでの議論をお願いします。
さあ、目を開けて
ここはどうでしょう?本質的なところは何も変わっていないんですね。OrderCloseTimeの呼び出しを増やしただけですね。そして、そのコードを1行に引き伸ばしたのです。そして、読みにくくなってしまった。しかし、結果は同じです。
私が見た限りでは、以下のような違いがあります。
さあ、目を開けてください。
(ため息) わかりました。その瞬間を逃した。それは認めます。
を見る限り、以下のような違いがあります。