4p0ssum: Gracias querida gss por tu interés en mi petición. Si eres un programador MQL4, puedes intercambiar tu EA con otros programadores MQL4. El código que he puesto funciona, lo he recogido de diferentes EAs, o para ser más precisos de uno de ellos, he cogido sólo la función Trailing Stop. El resto me lo he inventado yo (en cuanto a los pedidos pendientes). Me gustaría pedirle a usted y a otros gurús que echen un vistazo a mi código y que añadan dos funciones más a este robot, si no les importa.
1) Eliminación de una orden pendiente cuando se activa una de las dos.
2) Aumento automático de un lote (por cada 50$ 0,01 es decir, por 100$ será 0,02).
Gracias de antemano.
//+------------------------------------------------------------------+//| 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);
}
//+------------------------------------------------------------------+
Hola, me preguntaba si podríais ayudarme a escribir un EA. Este es el trato. Después de que una vela cierre con un gran volumen (de compra o de venta), se abre una orden de compra o de venta con un lote y un TP personalizables en la segunda. Gracias. Si pudiera ayudar)) Terminal MT4
ilfatiskhakov: Hola. Me preguntaba si podríais ayudarme a escribir un EA. Este es el trato. Después de que una vela cierre con un gran volumen (de compra o de venta), se abre una orden de compra o de venta con un lote y un TP personalizables en la segunda. Gracias. Si pudiera ayudar)) Terminal MT4
Hola, les pido que escriban un EA para el indicador ADX adjunto. Te pido que escribas un EA para este indicador y no para otro, porque hay muchas variedades.
El principio de funcionamiento de flecha a flecha, cuando aparece la flecha se abre el trato y cuando aparece la señal contraria se cierra y se abre en sentido contrario. El lote se calcula mediante la fórmula (Balance x (riesgo/1000), donde el riesgo va de 0 a 1. También debería haber una función de lote fijo
Hola, les pido que escriban un EA para el indicador ADX adjunto. Te pido que escribas un EA para este indicador y no para otro, porque hay muchas variedades.
El principio de funcionamiento de flecha a flecha, cuando aparece la flecha se abre el trato y cuando aparece la señal contraria se cierra y se abre en sentido contrario. El lote se calcula mediante la fórmula (Balance x (riesgo/1000), donde el riesgo va de 0 a 1. También debe haber una función de lote constante
Gracias querida gss por tu interés en mi petición. Si eres un programador MQL4, puedes intercambiar tu EA con otros programadores MQL4. El código que he puesto funciona, lo he recogido de diferentes EAs, o para ser más precisos de uno de ellos, he cogido sólo la función Trailing Stop. El resto me lo he inventado yo (en cuanto a los pedidos pendientes). Me gustaría pedirle a usted y a otros gurús que echen un vistazo a mi código y que añadan dos funciones más a este robot, si no les importa.
Hola. Me preguntaba si podríais ayudarme a escribir un EA. Este es el trato. Después de que una vela cierre con un gran volumen (de compra o de venta), se abre una orden de compra o de venta con un lote y un TP personalizables en la segunda. Gracias. Si pudiera ayudar)) Terminal MT4
https://www.mql5.com/ru/code/mt4/experts
Hola, les pido que escriban un EA para el indicador ADX adjunto. Te pido que escribas un EA para este indicador y no para otro, porque hay muchas variedades.
El principio de funcionamiento de flecha a flecha, cuando aparece la flecha se abre el trato y cuando aparece la señal contraria se cierra y se abre en sentido contrario. El lote se calcula mediante la fórmula (Balance x (riesgo/1000), donde el riesgo va de 0 a 1. También debería haber una función de lote fijo
Hola, les pido que escriban un EA para el indicador ADX adjunto. Te pido que escribas un EA para este indicador y no para otro, porque hay muchas variedades.
El principio de funcionamiento de flecha a flecha, cuando aparece la flecha se abre el trato y cuando aparece la señal contraria se cierra y se abre en sentido contrario. El lote se calcula mediante la fórmula (Balance x (riesgo/1000), donde el riesgo va de 0 a 1. También debe haber una función de lote constante
Señales falsas
+ indicador del futuro
Señales falsas sólidas
+ indicador del futuro
Yo comercio manualmente en H4 y no es malo
Iurii Tokman:
Señales falsas sólidas
+ indicador del futuro
En MT5 los puntos de entrada son ligeramente diferentes
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
corrió a comprobar el indicador - parece ser un buen comienzo
Opero manualmente en H4 y se ve bien.
resultados comerciales en el estudio
MT5 tiene puntos de entrada ligeramente diferentes
¿dónde está el futuro?
i - 1¿Dónde está el futuro?
No tengo ni idea - ¡lo hice tal cual! Soy autodidacta, todo por método científico
\\\\\\\\\\\\\ Yo mismo estoy sorprendido - también parece ser un buen resultado - mi experto es pesado - se necesita mucho tiempo para probar