Desculpe por trazer à tona um tema relativamente antigo. Eu entendi tudo com o código.
Agora eu tenho um enigma, como abrir um negócio. Por exemplo, logo após uma determinada faixa, estamos procurando
O preço é inferior ao máximo em um determinado número de pontos. Abrimos um acordo.
Tentei adicionar tal código e executá-lo no testador, mas ele não abre negócios.
O que eu devo fazer?
Isto deve funcionar, eu mesmo ainda não testei, pois o terminal está ocupado otimizando outro EA até agora
#define magic 123456789externint StartHour=16;
externint StartMinute=1;
externint StopHour=17;
externint StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеровdouble lots=0.1;// размер лотаdouble sl=100; // стоплосс в пунктахdouble tp=100; // тейкпрофит в пунктахint ticket=-1;
int OldBar;
int init() {
sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтахreturn(0);}
int deinit() {return(0);}
int start(){
staticdouble Maximum=-1;
int StartTime=StartHour*60+StartMinute;
int StopTime=StopHour*60+StopMinute;
if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дняdatetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер// В 22:55 Принудительно закрываем ордерif(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитанdatetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
count=start-count;// Сколко баров длится временной интервал
Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
}
if(Maximum>0 && Flag) {
double signal = Maximum - Bid;
if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.
}
}
return(0);
}
Esta linha pode ser removida ou não funcionará sem ela? Eu não entendo porque tenho que fechar um pedido?
É claro que você pode removê-lo, é apenas para testá-lo e não para multiplicar o número de pedidos abertos. Este é apenas um exemplo de treinamento de um EA. Não abre mais do que um pedido de VENDA por dia. E em sua EA, você mesmo deve decidir como fechar os pedidos: por stop loss, ter lucro ou outras condições. A hora 22:55 é escolhida porque muitas corretoras aumentam significativamente o spread, especialmente às sextas-feiras depois das 23:00 horas. Você pode pensar que deveríamos abrir mais de um pedido por dia. E este é um exemplo para um pedido colocado de lado. Devemos buscar o mínimo por analogia. Este código como exemplo, espero que facilite a criação de minha própria EA)
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют..if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в историиif (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
lastOOTHist = OrderOpenTime(); // Тогда время открытия последней закрытой позиции из истории
}
Na verdade, sim, eu tive um novo olhar esta manhã. Acontece que a primeira ordem, que tem mais lucro do que o necessário, dá um sinal para continuar a função (ou seja, não falta) e então, é claro, tudo estará errado.
Olá!
Desculpe por trazer à tona um tema relativamente antigo. Eu entendi tudo com o código.
Agora eu tenho um enigma, como abrir um negócio. Por exemplo, logo após uma determinada faixa, estamos procurando
O preço é inferior ao máximo em um determinado número de pontos. Abrimos um acordo.
Tentei adicionar tal código e executá-lo no testador, mas ele não abre negócios.
O que eu devo fazer?
Isto deve funcionar, eu mesmo ainda não testei, pois o terminal está ocupado otimizando outro EA até agora
Isto deve funcionar, eu mesmo não o testei, pois o terminal está ocupado em otimizar outro EA
Isto deve funcionar, eu mesmo não o testei, pois o terminal está ocupado em otimizar outro EA
Posso remover esta linha ou ela não funcionará sem ela? Eu não entendo porque tenho que fechar o pedido?
Esta linha pode ser removida ou não funcionará sem ela? Eu não entendo porque tenho que fechar um pedido?
É claro que você pode removê-lo, é apenas para testá-lo e não para multiplicar o número de pedidos abertos. Este é apenas um exemplo de treinamento de um EA. Não abre mais do que um pedido de VENDA por dia. E em sua EA, você mesmo deve decidir como fechar os pedidos: por stop loss, ter lucro ou outras condições. A hora 22:55 é escolhida porque muitas corretoras aumentam significativamente o spread, especialmente às sextas-feiras depois das 23:00 horas. Você pode pensar que deveríamos abrir mais de um pedido por dia. E este é um exemplo para um pedido colocado de lado. Devemos buscar o mínimo por analogia. Este código como exemplo, espero que facilite a criação de minha própria EA)
Olá!
Eu sou um boneco, mas quero mudar algo no código eu mesmo...
Qualquer conselho, se você não se importar com o seu tempo...
Tenho algumas perguntas:
1. Como acrescentar uma variável "stop loss" à minha EA? Quero ser capaz de mudá-la, é claro.
2. Como permitir que minha EA acrescente um comentário para cada uma de minhas profissões ?
3. Como posso adicionar um número mágico ao meu EA?
Olá!
Eu sou um boneco, mas quero mudar algo no código eu mesmo...
Qualquer conselho, se você não se importar com o seu tempo...
Tenho algumas perguntas:
1. Como acrescentar uma variável "stop loss" à minha EA? Quero ser capaz de mudá-la, é claro.
2. Como permitir que minha EA acrescente um comentário para cada uma de minhas profissões ?
3. Como adicionar um EA com um número mágico?
1. stopLoss duplo externo=100,0;//add variável stop loss
2-3. int ticket=OrderSend(Símbolo, TypeOfOrder,LotsOfOrder ,OpenPriceOfOrder,Slippage ,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CLR_NONE) ;
4. LEIA!
Aqui está a junta:
Boa tarde!
Você pode me dizer como estabelecer a otimização do Expert Advisor para que ele também mostre resultados negativos de passe?
Boa tarde!
Você pode me dizer como estabelecer a otimização do Expert Advisor para que ele também mostre resultados negativos de passe?