lütfen bakın nerede hata yaptım (çalışmak istemiyorum)
Bunu şu koşulda istiyorum: if(GetLotSize()>LotControl)- satın alma sinyalisapma *_Point parametresi (parametrelerde ayarlanmış) tarafından değiştirilir
LotControl - ayarlarda da ayarlanır
GetLotSize() - önerildiği gibi:
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();
}
Ama yine de aynı tik üzerinde iki zıt yönlü pozisyon açılıyor mu? Bu olamaz!
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;
}
Bu kod pahasına, hiçbir şey değişmemiş olabilir. Çünkü siparişler kapanışta.
Algoritmanızı doğru anlayacaksınız.
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));
}
Burada, genel olarak, bir Al ve Sat sinyaline giriş ve daha fazlası değil. Burada işinize yaramayan ne olabilir?... Piyasanın giriş işlevleri değil, çıkış işlevleri değil...
//+----------------------------------------------------------------------------+if (bSignalBuy())
{
if (GetLotSize()>LotControl) vOrderOpenSell();
else vOrderOpenBuy();
}
//+----------------------------------------------------------------------------+double GetLotSize()
{
double Ls= 0 ;
datetime t= 0 ;
int i=OrdersHistoryTotal();
for ( int pos= 0 ; pos<i; pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
}
}
}
}
return Ls;
}
//+----------------------------------------------------------------------------+
Ve burada ne var? Gerçekten hiçbir şeyi değiştirmedin. Az önce OrderCloseTime'a daha fazla çağrı yaptım. Kod tek satırda çıkarıldı. Ve daha az okunabilir hale geldi. Ama sonuç aynı kalıyor.
Ve burada ne var? Gerçekten hiçbir şeyi değiştirmedin. Az önce OrderCloseTime'a daha fazla çağrı yaptım. Ve kod bir satırda çekildi. Ve daha az okunabilir hale geldi. Ama sonuç aynı kalıyor.
Görebildiğim kadarıyla, fark aşağıdaki gibidir:
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;
}
double GetLotSize()
{
double Ls= 0 ;
datetime t= 0 ;
int i=OrdersHistoryTotal();
for ( int pos= 0 ; pos<i; pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic)
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
}
}
}
}
return Ls;
}
мне как то объясняли, что один вариант считает с конца списка, а второй с начала.
merhaba !
lütfen bakın nerede hata yaptım (çalışmak istemiyorum)
Bunu şu koşulda istiyorum: if (GetLotSize()>LotControl)- satın alma sinyali sapma * _Point parametresi (parametrelerde ayarlanmış) tarafından değiştirilir
LotControl - ayarlarda da ayarlanır
GetLotSize() - önerildiği gibi:
Teşekkür ederim. nedense işe yaramadı.
Teşekkür ederim. nedense işe yaramadı.
Yazdım:
Ama yine de aynı tik üzerinde iki zıt yönlü pozisyon açılıyor mu? Bu olamaz!
Bu kod pahasına, hiçbir şey değişmemiş olabilir. Çünkü siparişler kapanışta.
Algoritmanızı doğru anlayacaksınız.
Burada, genel olarak, bir Al ve Sat sinyaline giriş ve daha fazlası değil. Burada işinize yaramayan ne olabilir?... Piyasanın giriş işlevleri değil, çıkış işlevleri değil...
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma
MakarFX , 2021.12.02 18:30
Ve burada ne var? Gerçekten hiçbir şeyi değiştirmedin. Az önce OrderCloseTime'a daha fazla çağrı yaptım. Kod tek satırda çıkarıldı. Ve daha az okunabilir hale geldi. Ama sonuç aynı kalıyor.
Ve burada ne var? Gerçekten hiçbir şeyi değiştirmedin. Az önce OrderCloseTime'a daha fazla çağrı yaptım. Ama sonuç aynı.
gözlerini aç
Stüdyodaki tartışmalar lütfen
Stüdyodaki tartışmalar lütfen
Şimdi gözlerini aç
Ve burada ne var? Gerçekten hiçbir şeyi değiştirmedin. Az önce OrderCloseTime'a daha fazla çağrı yaptım. Ve kod bir satırda çekildi. Ve daha az okunabilir hale geldi. Ama sonuç aynı kalıyor.
Görebildiğim kadarıyla, fark aşağıdaki gibidir:
Şimdi gözlerini aç
İyi. Bu anı özledim. İtiraf ederim.
Görebildiğim kadarıyla, fark aşağıdaki gibidir: