Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я бы хотел помочь с этой функцией, о которой вы говорите, но, похоже, я не могу просто понять вашу логику. Это действительно не имеет ничего общего с другой логикой стратегии.
Я бы просто хотела узнать это.
Если у вас есть 1 лот на покупку по цене 1.4110 и 2 лота на продажу по цене 1.4200. По какой цене вы думаете, что у вас есть 6 пунктов прибыли?Привет Кристина,
В моем управлении позициями никогда, 1 лот на покупку закрывается с прибылью, прежде чем открывается 2 лот на продажу (продажи никогда, потому что 1 лот на покупку закрылся в прибыли, ждите следующего сигнала).
Вернемся к вашему примеру:
но есть линия примерно на 1.4175, где 2 лота на продажу (прибыль вверх, рынок вниз) и 1 лот на покупку (прибыль вниз, рынок вниз) равны по цене (безубыток 0), так что на 1.4169 6 пунктов прибыли готовы - тогда я бы закрыл все ордера.
IX
Привет Кристина,
в моем управлении позициями никогда, 1 лот на покупку закрывается с прибылью, перед тем как открывается 2 лот на продажу. (продажи никогда, потому что 1 лот на покупку закрылся в прибыли, ждите следующего сигнала).
Вернемся к вашему примеру:
но есть линия примерно на 1.4175, где 2 лота на продажу (прибыль вверх, рынок вниз) и 1 лот на покупку (прибыль вниз, рынок вниз) равны по цене (безубыток 0), так что на 1.4169 6 пунктов прибыли готовы - тогда я бы закрыл все ордера.
IXПотому что мой пример - 1.4110 и 1.4200. Вот мой расчет:
Во-первых, на уровне 1.4170 (без учета спредов) мы в безубытке. Теперь у нас есть 2 лота на продажу с прибылью в 30 пунктов каждый и 1 лот на покупку с убытком в 60 пунктов, так что в долларовом выражении мы в безубытке.
Если точно следовать моему примеру, то при цене 1.4164 у вас должно быть 6 пунктов прибыли.
На уровне 1.4164 (без учета спредов) у нас есть 2 лота на продажу с прибылью в 36 пунктов каждый и 1 лот на покупку с убытком в 54 пункта, таким образом, прибыль в 72 пункта от продажи и убыток в 54 пункта от покупки. В целом по группе сделок у вас есть 3 лота с прибылью в 18 пунктов. Поэтому разумнее считать, что теперь у вас есть 6 пунктов прибыли.
Однако все снова усложняется из-за спредов. Ведь если бид равен 1,4164, а аск может быть 1,4166, то ваши продажи принесут только 34 пункта прибыли каждая. В целом по группе сделок у вас есть 3 лота с прибылью в 14 пунктов. То есть фактически вы получили 4,7 пункта прибыли.
Если я сделаю еще один шаг вперед, если у нас будет 2 покупки и 3 продажи. Тогда на уровне 1,4164 вы выходите в безубыток.
Если не учитывать спреды, то нам нужно 30 пунктов общей прибыли, чтобы получить 5 пунктов прибыли на каждом лоте. Значит, прибыль в 6 пунктов будет при цене 1.4134, правильно ли это?
В вашей системе, вероятно, не будет такой ситуации, я хочу получить именно такой принцип. Согласны ли вы с приведенным выше расчетом?
Потому что мой пример - 1.4110 и 1.4200. Вот мой расчет:
Прежде всего, на уровне 1.4170 (без учета спредов) мы находимся в безубытке. Теперь у нас есть 2 лота на продажу с прибылью в 30 пунктов каждый и 1 лот на покупку с убытком в 60 пунктов, так что в долларовом выражении мы в безубытке.
Если точно следовать моему примеру, то при цене 1.4164 у вас должно быть 6 пунктов прибыли.
На уровне 1.4164 (без учета спредов) у нас есть 2 лота на продажу с прибылью в 36 пунктов каждый и 1 лот на покупку с убытком в 54 пункта, таким образом, прибыль в 72 пункта от продажи и убыток в 54 пункта от покупки. В целом по группе сделок у вас есть 3 лота с прибылью в 18 пунктов. Поэтому разумнее считать, что теперь у вас есть 6 пунктов прибыли.
Однако все снова усложняется из-за спредов. Ведь если бид равен 1,4164, а аск может быть 1,4166, то ваши продажи принесут только 34 пункта прибыли каждая. В целом по группе сделок у вас есть 3 лота с прибылью в 14 пунктов. То есть фактически вы получили 4,7 пункта прибыли.
Если я сделаю еще один шаг вперед, если у нас будет 2 покупки и 3 продажи. Тогда на уровне 1,4164 вы выходите в безубыток.
Если не учитывать спреды, то нам нужно 30 пунктов общей прибыли, чтобы получить 5 пунктов прибыли на каждом лоте. Таким образом, прибыль в 6 пунктов будет при цене 1.4134, правильно ли это?
В вашей системе, вероятно, не будет такой ситуации, это принцип, который я хочу получить. Согласны ли вы с приведенным выше расчетом?Кристина,
Я согласна, вы на 100% правы с обоими расчетами!
Привет, Майкл,
Я слишком занят в последние пару дней, я уже сделал это, но мне нужно больше времени, чтобы собрать все вместе. Я опубликую его здесь, как только найду время в ближайшие несколько дней. Криситна
Привет, Майкл, я слишком занят в последние пару дней, я уже сделал это, но мне нужно больше времени, чтобы собрать все вместе. Я опубликую его здесь, как только найду время в ближайшие несколько дней. Криситна
Привет, Кристина,
без проблем, не торопитесь, я всегда ценю ваши предложения!
Майкл
мне нужна помощь
Привет всем!
Вот моя идея: мне нужно 2 индикаторных буфера в отдельном_окне, 1 - devupBuffer[]; 2 - devdwBuffer[]. Например, если есть пять цифровых показателей 1,2,3,4,5, их среднее значение равно 3.Тогда данные больше, чем среднее 3 4 и 5 devupBuffer={【(4-average)*(4-average)】+【(5-среднее)*(5-среднее)】}/Стандартное отклонение(1,2,3,4,5)*Стандартное отклонение(1,2,3,4,5).Данные меньше среднего значения 3 1 и 2 devdwBuffer={【(1-average)*(1-average)】+【(2-среднее)*(2-среднее)】}/Стандартное отклонение(1,2,3,4,5)*Стандартное отклонение(1,2,3,4,5).
почему этот советник не может покупать или продавать?
Здравствуйте, я новичок в программировании на Meta... пожалуйста, помогите...
Я работаю с системой на Стохастике с двумя уровнями, 25 и 75...
только ОДНА сделка...
если MAIN и SIGNAL оба ниже 25 и пересекаются, ПОКУПАТЬ.
если MAIN и SIGNAL пересекаются выше 25, ЗАКРЫВАЙТЕ ПОКУПКУ.
если MAIN и SIGNAL оба выше 75 и пересекаются, ПРОДАВАЙТЕ.
если MAIN и SIGNAL пересекаются (не обязательно ниже 75), ЗАКРЫВАЕМ ПРОДАЖУ.
вот и все...
//| StochCross.mq4 |
//| RobertEli |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "RobertEli"
#property link "http://www.metaquotes.net"
//--- input parameters
extern double TakeProfit=250.0;
extern double Lots=0.01;
extern double TrailingStop=35.0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Confirm (double line1, double line2, int level_buy, int level_sell)
{
static int confirmation = 0;
if ((line1 < level_buy) && (line2 < level_buy)) confirmation = 1; //confirm BUY, when two lines are below level_buy
if ((line1 > level_sell) && (line2 > level_sell)) confirmation = 2; //confirm SELL, when two lines are above level_sell
if ((line1 > level_buy) && (line2 > level_buy)) confirmation = 3; //confirm CLOSE BUY, when two lines are above level_buy
if ((line1 < level_sell) && (line2 < level_sell)) confirmation = 4; //confirm CLOSE SELL, when two lines are below level_sell
//if ((line1 > level_buy_close) && (line2 > level_buy_close)) confirmation = 3; //confirm CLOSE BUY
//if ((line1 < level_sell_close) && (line2 < level_sell_close)) confirmation = 4; //confirm CLOSE SELL
//else return (0);
return (confirmation);
}
int Crossed (double line1, double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if (line1 > line2) current_direction = 1; //UP
if (line1 < line2) current_direction = 2; //DOWN
if (current_direction != last_direction) //changed direction
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (0);
}
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, ticket;
double Stoch_main, Stoch_sign;
if (Bars < 100)
{
Print("BARS less than 100");
return (0);
}
if (TakeProfit < 10)
{
Print("TakeProfit less than 10");
return (0);
}
/*
Stoch_main = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_MAIN,0);
Stoch_sign = iStochastic (NULL,15,21,8,13,MODE_SMA,1,MODE_SIGNAL,0);
*/
Stoch_main = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_MAIN,0);
Stoch_sign = iStochastic (NULL,0,30,20,12,MODE_SMA,1,MODE_SIGNAL,0);
/*
Stoch_main = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
Stoch_sign = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
*/
int isCrossed = Crossed(Stoch_main,Stoch_sign);
int isConfirmed = Confirm(Stoch_main,Stoch_sign,25,75);
int total = OrdersTotal();
if (total == 0)
{
if ((isCrossed == 1) && (isConfirmed == 1))
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"Buy at " + Ask,24848,0,Green);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Order opened: " +Ask ,OrderOpenPrice());
else Print ("Error Opening BUY Order: ", GetLastError());
return (0);
}
}
if ((isCrossed == 2) && (isConfirmed == 2))
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"Sell at " + Bid,24848,0,Red);
if (ticket > 0)
{
if (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Order opened: " +Bid ,OrderOpenPrice());
else Print ("Error Opening SELL Order: ", GetLastError());
return (0);
}
}
return (0);
}
else
{
for (cnt = total; cnt < 0; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY) //the trade was a Buy position
{ //check for closing)
if ((isCrossed == 2) && (isConfirmed == 3))
//if (isCrossed == 2)
{ //change of direction
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //close Buy position
return (0);
}
}
else // the trade was a SELL position
{
//should it be closed?
//if ((isCrossed == 1) && (isConfirmed == 4))
if (isCrossed == 1) //Closing the SELL need not to be below the level_buy... it's very dangerous to wait for it...
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //Sell position is now closed
return (0);
}
}
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+EA не может сделать то, что он должен делать, HELP!
Здравствуйте, я действительно новичок в программировании mq4, но я читал учебники codersgurus (большое спасибо!), так что я думаю, что я могу понять кое-что... Однако, я создал советник, основанный на движущихся средних... НО ОН УЖАСНО НЕ РАБОТАЕТ ТАК, КАК ДОЛЖЕН РАБОТАТЬ!
правила здесь очень просты...
1. MA_04_1H (означает период скользящей средней 4 для 1-часового таймфрейма) пересекается выше MA_14_1H,
подтвердите это тем, что MA_04_4H выше MA_14_4H (тренд восходящий) ------> ПОКУПАТЬ!
2. MA_04_1H пересекается ниже MA_14_1H,
подтвердите это тем, что MA_04_4H ниже MA_14_4H (тренд нисходящий)------> ПРОДАВАТЬ!
3. когда MA_04_1H пересечется с MA_14_1H, закройте этот ордер (он может начать новый ордер, учитывая правила #1 и #2).
4. только одна сделка... (если BUY, закрыть эту BUY. после этого SELL, если необходимо).
Я сделал 2 функции: Пересечение и Подтверждение.
Пересечение - для 1-часового таймфрейма.
Confirmed - для 4-часового таймфрейма.
может ли кто-нибудь помочь мне отладить эту штуку?
//| MACross1TradeOnly.mq4 |
//| RobertEli |
//| |
//+------------------------------------------------------------------+
// this will work on MA_04, and MA__14
#property copyright "RobertEli"
#property link ""
extern double Lots = 0.01;
extern int stoploss_value = 10; // $10
bool up = 0, //UP direction, when MA_04 is above MA_14
down = 0, //DOWN direction, when MA_14 is above MA_04
change = 0, //when the MA_04 and MA_14 cross
firsttime = true; //first time for direction_prev
int direction_curr = 0; // 1 if UP, 2 if down...
int direction_prev = 0; // this will hold previous value of direction_curr
int direction_trend= 0; // trend direction for confirmation
int cross = 0; // if direction_curr and direction_prev changes course
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
int Crossed (double line1, double line2)
{
static int last_direction = 0;
static int current_direction = 0;
if (line1 - line2 > 0)//(line1 > line2)
{
current_direction = 1; //UP
if (firsttime == true)
{
current_direction = 0;
last_direction = 1;
firsttime = false;
return (0);
}
}
if (line1 - line2 < 0)//(line1 < line2)
{
current_direction = 2; //DOWN
if (firsttime == true)
{
current_direction = 0;
last_direction = 2;
firsttime = false;
return (0);
}
}
if ((current_direction != last_direction) && (firsttime == false)) //changed direction
{
last_direction = current_direction;
return (last_direction);
}
else
{
return (last_direction);
}
}
int Confirmed (double line1, double line2)
{
int trend;
if (line1 > line2) trend = 1; // trend direction is UP
if (line1 < line2) trend = 2; // trend direction is DOWN
return (trend);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt,ticket, total;
//double MA_04, MA_07 , MA_14 , MA_21 , MA_28; //MOVING AVERAGES with their corresponding period
if (Bars < 100) { Print ("Bars less than 100."); return (0); }
double MA_04_1H = iMA(NULL,60,04,0,MODE_EMA,PRICE_CLOSE,0);
double MA_14_1H = iMA(NULL,60,14,0,MODE_EMA,PRICE_CLOSE,0);
double MA_04_4H = iMA(NULL,240,04,0,MODE_EMA,PRICE_CLOSE,0);
double MA_14_4H = iMA(NULL,240,14,0,MODE_EMA,PRICE_CLOSE,0);
//double stoploss = stoploss_value / (Lots * 100000);
//new code from v_1
cross = Crossed (MA_04_1H,MA_14_1H); // =1 for UP, =2 for DOWN
direction_trend = Confirmed (MA_04_4H, MA_14_4H); // =1 for UP, =2 for DOWN
total = OrdersTotal();
if (total == 0)
{
if((cross == 1) && (direction_trend == 1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,/*Ask-stoploss*/0,0,"Buy at: "+ Ask,12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice(),",<<<<",OrderStopLoss());
}
else Print("Error opening BUY order : ",GetLastError());
cross = 0;
return(0);
}
if((cross == 2) && (direction_trend == 2))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,/*Bid+stoploss*/0,0,"Sell at: "+ Bid,12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
cross = 0;
return(0);
}
}
if (total == 1)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
// bool no_buy_sell = ((OrderTakeProfit() 0));
if ((OrderType()==OP_BUY) && (cross == 2) )// && (no_buy_sell))
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
//OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+stoploss,0,"Sell at: "+ Bid,12345,0,Red);
return (0);
}
else if ((OrderType()==OP_SELL) && (cross == 1) )// && (no_buy_sell))
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
//OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-stoploss,0,"Buy at: "+ Ask,12345,0,Green);
return (0);
}
}
}
else return (0);
//----
return(0);
}
//+------------------------------------------------------------------+пожалуйста, не обращайте внимания на мое предыдущее сообщение... я выбросил эту идею... сейчас я работаю над этим... так что, пожалуйста, помогите...