Favor verificar onde cometi um erro (não quer trabalhar)
Quero que o sinal de compra seja deslocado pelodesvio * _Ponto (definido em configurações)if(GetLotSize()>LotControl)
LotControl - também definido nas configurações
GetLotSize() - como recomendado:
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);
}
Obrigado. Não teve qualquer efeito por algum motivo.
Eu escrevi:
if (bSignalBuy()) {
if (GetLotSize() > LotControl)
vOrderOpenSell();
else
vOrderOpenBuy();
}
Mas ainda abre duas posições direcionadas de forma diferente no mesmo carrapato? Isso não pode estar certo!
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;
}
Sobre este código, pode muito bem ser que nada tenha mudado. Uma vez que as ordens são executadas na ordem de fechamento.
Ordene seu algoritmo da melhor forma possível.
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));
}
Você deve verificar seu algoritmo. Aqui, você está entrando pelos sinais Comprar e Vender e nada mais. O que pode não funcionar aqui? Sem funções de entrada, sem funções de saída do mercado.
O que há aqui dentro? Você não mudou nada na essência. Você acabou de fazer mais ligações para OrderCloseTime. O código foi esticado em uma linha. E tornou-se menos legível. Mas o resultado ainda é o mesmo.
E aqui? Você não mudou nada na essência. Você acabou de fazer mais ligações para OrderCloseTime. E nós esticamos o código em uma linha. E tornou-se menos legível. Mas o resultado é o mesmo.
Tanto quanto eu posso ver, a diferença está no seguinte:
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;
}
Olá !
Favor verificar onde cometi um erro (não quer trabalhar)
Quero que o sinal de compra seja deslocado pelodesvio * _Ponto (definido em configurações)if(GetLotSize()>LotControl)
LotControl - também definido nas configurações
GetLotSize() - como recomendado:
Obrigado. Não teve qualquer efeito por algum motivo.
Obrigado. Não teve qualquer efeito por algum motivo.
Eu escrevi:
Mas ainda abre duas posições direcionadas de forma diferente no mesmo carrapato? Isso não pode estar certo!
Sobre este código, pode muito bem ser que nada tenha mudado. Uma vez que as ordens são executadas na ordem de fechamento.
Ordene seu algoritmo da melhor forma possível.
Você deve verificar seu algoritmo. Aqui, você está entrando pelos sinais Comprar e Vender e nada mais. O que pode não funcionar aqui? Sem funções de entrada, sem funções de saída do mercado.
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos
MakarFX, 2021.12.02 18:30
O que há aqui dentro? Você não mudou nada na essência. Você acabou de fazer mais ligações para OrderCloseTime. O código foi esticado em uma linha. E tornou-se menos legível. Mas o resultado ainda é o mesmo.
E aqui? Você não mudou nada na essência. Você acabou de fazer mais ligações para OrderCloseTime. Mas o resultado é o mesmo.
abra seus olhos
Argumentos no estúdio, por favor
Argumentos no estúdio, por favor.
Agora abra seus olhos
E aqui? Você não mudou nada na essência. Você acabou de fazer mais ligações para OrderCloseTime. E nós esticamos o código em uma linha. E tornou-se menos legível. Mas o resultado é o mesmo.
Tanto quanto eu posso ver, a diferença está no seguinte:
Agora abra seus olhos.
(suspiros) Está bem. Eu perdi esse momento. Eu admito isso.
até onde eu posso ver, a diferença é a seguinte: