4p0ssum: Obrigado querido gss por seu interesse em meu pedido. Se você é um programador da MQL4, não precisa procurá-la, você pode obtê-la no Mercado MQL4. O código que afixei funciona, eu o coletei de diferentes EAs, ou, para ser mais preciso, de um deles, eu só tomei a função Trailing Stop. O resto eu mesmo inventei (em relação às ordens pendentes). Gostaria de pedir a você e a outros gurus para dar uma olhada em meu código e acrescentar mais duas funções a este robô, se você não se importar.
1) Eliminação de uma ordem pendente quando uma das duas é acionada.
2) Aumento automático de um lote (para cada 50$ 0,01, ou seja, para 100$ será de 0,02).
Agradecemos antecipadamente.
//+------------------------------------------------------------------+//| 4p0ssum.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#property strictexternint TakeProfit = 100.0;
externbool AllPositions = True; // Управлять всеми позициямиexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 50; // Фиксированный размер тралаexternint TrailingStep = 0; // Шаг тралаexternbool Del = false; // Удалять оппозитный ордерexternbool UseSound = False; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav"; // Наименование звукового файла//------- Внешние параметры модуля -----------------------------------externstring _Parameters_b_Lots = "---------- Параметры модуля расчёта лота";
externint LotsWayChoice = 0; // Способ выбора рабочего лота:// 0-фиксированный,// 1-процент от депозита,// 2-фиксированно-пропорциональный,// 3-фракционно-фиксированный,externdouble Lots = 0.1; // Фиксированный размер лотаexternint LotsPercent = 10; // Процент от депозитаexternint LotsDeltaDepo = 500; // Коэффициент приращения депозитаexternint LotsDepoForOne = 500; // Размер депозита для одного минилотаexternint LotsMax = 1000; // Максимальное количество минилотов//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void start()
{
double TakeProfitLevelB;
double TakeProfitLevelS;
double BuyStart = Ask + 400*_Point;
double SellStart = Bid - 400*_Point;
TakeProfitLevelB = BuyStart + TakeProfit*Point;
TakeProfitLevelS = SellStart - TakeProfit*Point;
if (Open[1]==Close[1]&& OrdersTotal()==0)
{
int BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,GetSizeLot(),BuyStart,3,0,TakeProfitLevelB,NULL,0,0,Green);
int SellTicket = OrderSend(Symbol(),OP_SELLSTOP,GetSizeLot(),SellStart,3,0,TakeProfitLevelS,NULL,0,0,Blue);
}
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllPositions || OrderSymbol()==Symbol()) {
TrailingPositions();
}
}
}
if(Del && ExistPositions(Symbol()))DeleteOrders(Symbol(),-1);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void TrailingPositions()
{
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void ModifyStopLoss(double ldStopLoss)
{
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 06.03.2008 |//| Описание : Возвращает флаг существования позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| ot - время открытия ( 0 - любое время открытия) |//+----------------------------------------------------------------------------+bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.06.2007 |//| Описание : Удаление ордеров. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+void DeleteOrders(string sy="", int op=-1, int mn=-1) {
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), clrRed);
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.02.2008 |//| Описание : Возвращает одно из двух значений взависимости от условия. |//+----------------------------------------------------------------------------+string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); elsereturn(ifFalse);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//| Параметры: |//| m - текст сообщения |//+----------------------------------------------------------------------------+void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}
//+------------------------------------------------------------------+//| Главная функция получения размера лота (вызывается из советника) |//+------------------------------------------------------------------+double GetSizeLot()
{
double dLot;
if (LotsWayChoice==0) dLot=Lots;
// фиксированный процент от депозитаif (LotsWayChoice==1)
{
dLot=MathCeil(AccountFreeMargin()/100000*LotsPercent)/10;
}
// фиксированно-пропорциональныйif (LotsWayChoice==2)
{
int k=LotsDepoForOne;
for (double i=2; i<=LotsMax; i++)
{
k=k+i*LotsDeltaDepo;
if (k>AccountFreeMargin())
{
dLot=(i-1)/10000; break;
}
}
}
// фракционно-фиксированныйif (LotsWayChoice==3)
{
dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;
}
if (dLot<MarketInfo(Symbol(), MODE_MINLOT)) dLot=MarketInfo(Symbol(), MODE_MINLOT);
if (dLot<0.01) dLot=0.01;
return(dLot);
}
//+------------------------------------------------------------------+
Olá, eu estava pensando se você poderia me ajudar a escrever um EA. O negócio é o seguinte. Após o fechamento de uma vela com um grande volume (Comprar ou Vender), um pedido de Compra ou Venda com um lote personalizável e TP é aberto no segundo. Obrigado. Se você puder ajudar)) Terminal MT4
ilfatiskhakov: Olá. Eu estava pensando se você poderia ajudar a escrever um EA. O negócio é o seguinte. Após o fechamento de uma vela com um grande volume (Comprar ou Vender), um pedido de Compra ou Venda com um lote personalizável e TP é aberto no segundo. Obrigado. Se você puder ajudar)) Terminal MT4
Olá, estou lhe pedindo para escrever um EA para o indicador ADX anexo. Peço-lhe que escreva um EA para este indicador e não para outro, pois existem muitas variedades.
O princípio de operação de seta para seta, quando a seta aparece o negócio é aberto e quando o sinal oposto aparece o negócio é fechado e aberto na direção oposta. O lote é calculado utilizando a fórmula (Equilíbrio x (risco/1000), onde o risco é de 0 a 1. Também deve haver uma função de lote fixo
Olá, estou lhe pedindo para escrever um EA para o indicador ADX anexo. Peço-lhe que escreva um EA para este indicador e não para outro, pois existem muitas variedades.
O princípio de operação de seta para seta, quando a seta aparece o negócio é aberto e quando o sinal oposto aparece o negócio é fechado e aberto na direção oposta. O lote é calculado utilizando a fórmula (Equilíbrio x (risco/1000), onde o risco é de 0 a 1. Também deve haver uma função de lote constante
Obrigado querido gss por seu interesse em meu pedido. Se você é um programador da MQL4, não precisa procurá-la, você pode obtê-la no Mercado MQL4. O código que afixei funciona, eu o coletei de diferentes EAs, ou, para ser mais preciso, de um deles, eu só tomei a função Trailing Stop. O resto eu mesmo inventei (em relação às ordens pendentes). Gostaria de pedir a você e a outros gurus para dar uma olhada em meu código e acrescentar mais duas funções a este robô, se você não se importar.
Olá. Eu estava pensando se você poderia ajudar a escrever um EA. O negócio é o seguinte. Após o fechamento de uma vela com um grande volume (Comprar ou Vender), um pedido de Compra ou Venda com um lote personalizável e TP é aberto no segundo. Obrigado. Se você puder ajudar)) Terminal MT4
https://www.mql5.com/ru/code/mt4/experts
Olá, estou lhe pedindo para escrever um EA para o indicador ADX anexo. Peço-lhe que escreva um EA para este indicador e não para outro, pois existem muitas variedades.
O princípio de operação de seta para seta, quando a seta aparece o negócio é aberto e quando o sinal oposto aparece o negócio é fechado e aberto na direção oposta. O lote é calculado utilizando a fórmula (Equilíbrio x (risco/1000), onde o risco é de 0 a 1. Também deve haver uma função de lote fixo
Olá, estou lhe pedindo para escrever um EA para o indicador ADX anexo. Peço-lhe que escreva um EA para este indicador e não para outro, pois existem muitas variedades.
O princípio de operação de seta para seta, quando a seta aparece o negócio é aberto e quando o sinal oposto aparece o negócio é fechado e aberto na direção oposta. O lote é calculado utilizando a fórmula (Equilíbrio x (risco/1000), onde o risco é de 0 a 1. Também deve haver uma função de lote constante
Sinais falsos
+ indicador do futuro
Sinais falsos sólidos
+ indicador do futuro
Eu negocio manualmente no H4 e não é ruim
Iurii Tokman:
Sinais falsos sólidos
+ indicador do futuro
Em MT5 pontos de entrada ligeiramente diferentes
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
correu para verificar o indicador - parece ser um bom começo
Eu negocio manualmente no H4 e parece bom.
resultados comerciais no estúdio
O MT5 tem pontos de entrada ligeiramente diferentes
onde está o futuro?
i - 1Onde está o futuro?
Não tenho idéia - eu fiz como está! Sou autodidata, tudo por método científico
\\\\\\\\\\\\\ Eu mesmo estou surpreso - também parece ser um bom resultado - meu especialista é pesado - leva muito tempo para testar