Как кодировать? - страница 267

 
christinaLi:
Я бы хотел помочь с этой функцией, о которой вы говорите, но, похоже, я не могу просто понять вашу логику. Это действительно не имеет ничего общего с другой логикой стратегии.

Я бы просто хотела узнать это.

Если у вас есть 1 лот на покупку по цене 1.4110 и 2 лота на продажу по цене 1.4200. По какой цене вы думаете, что у вас есть 6 пунктов прибыли?

Привет Кристина,

В моем управлении позициями никогда, 1 лот на покупку закрывается с прибылью, прежде чем открывается 2 лот на продажу (продажи никогда, потому что 1 лот на покупку закрылся в прибыли, ждите следующего сигнала).

Вернемся к вашему примеру:

но есть линия примерно на 1.4175, где 2 лота на продажу (прибыль вверх, рынок вниз) и 1 лот на покупку (прибыль вниз, рынок вниз) равны по цене (безубыток 0), так что на 1.4169 6 пунктов прибыли готовы - тогда я бы закрыл все ордера.

IX

 
ixbone:
Привет Кристина,

в моем управлении позициями никогда, 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, правильно ли это?

В вашей системе, вероятно, не будет такой ситуации, я хочу получить именно такой принцип. Согласны ли вы с приведенным выше расчетом?

 
christinaLi:
Потому что мой пример - 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% правы с обоими расчетами!

 

Привет, Майкл,

Я слишком занят в последние пару дней, я уже сделал это, но мне нужно больше времени, чтобы собрать все вместе. Я опубликую его здесь, как только найду время в ближайшие несколько дней. Криситна

 
 
christinaLi:
Привет, Майкл, я слишком занят в последние пару дней, я уже сделал это, но мне нужно больше времени, чтобы собрать все вместе. Я опубликую его здесь, как только найду время в ближайшие несколько дней. Криситна

Привет, Кристина,

без проблем, не торопитесь, я всегда ценю ваши предложения!

Майкл

 
 

мне нужна помощь

Привет всем!

Вот моя идея: мне нужно 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);

}

//+------------------------------------------------------------------+

пожалуйста, не обращайте внимания на мое предыдущее сообщение... я выбросил эту идею... сейчас я работаю над этим... так что, пожалуйста, помогите...