Держите. Только какой в этом смысл?Уважаемые знатоки! помогите сделать в советнике так чтобы он открывал одновременно позиции бай и селл вместо одной позы бай или селл
советник
Посмотреть вложение 115856
индюк
Посмотреть вложение 115858
Одновременное открытие поз реализовано в скрипте, мож кому пригодиться
скрипт
Посмотреть вложение 115859
extern int LotFactor=10; //Эта переменная только для удобства оптимизации советника.
extern int StopLoss=500;
extern int TakeProfit=750;
extern double Lot=0.01; //Изначальный лот.
double LotF=513; //Это множитель для насыщения.
bool buy=true; //Будет ли сделка BUY или SELL
int init()
{
return(0);
}
int start()
{
switch(LotFactor) //Тут в зависимости от переменной LotFactor будет выбираться множитель для лота. По умолчанию LotFactor = 10, т.е. множитель (LotF) равен 513.
{
case 1 : LotF=1.5; break;
case 2 : LotF=3; break;
case 3 : LotF=5; break;
case 4 : LotF=9; break;
case 5 : LotF=17; break;
case 6 : LotF=33; break;
case 7 : LotF=65; break;
case 8 : LotF=129; break;
case 9 : LotF=257; break;
case 10 : LotF=513; break;
case 11 : LotF=1025; break;
case 12 : LotF=2049; break;
default : LotF=513; break;
}
int total, oldtotal, cnt, myTicket, myMagic=111;
bool myTrades = false;
total = OrdersTotal();
for(cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == myMagic)
{
myTicket = OrderTicket();
myTrades = true;
}
}
double Lots = Lot; // Lots - это лот, на который советник будет торговать. В начале он задается равным тому лоту, что мы ставим в настройках советника.
oldtotal = OrdersHistoryTotal();
if(oldtotal > 0)
{
OrderSelect(oldtotal - 1, SELECT_BY_POS, MODE_HISTORY); //Выбираем предыдущий ордер из истории.
if(OrderProfit() > 0) //Если этот предыдущий ордер из истории был выигрышным - меняем направление сделки.
{
if(OrderType() == OP_BUY)
{
buy=false;
}
if(OrderType() == OP_SELL)
{
buy=true;
}
}
if(OrderProfit() < 0) //Если этот предыдущий ордер из истории был проигрышным - сохраняем направление сделки.
{
Lots = OrderLots() * 2; // И удваиваем лот.
if(OrderType() == OP_BUY)
{
buy=true;
}
if(OrderType() == OP_SELL)
{
buy=false;
}
}
else
{
Lots = Lot; // Когда попалась выигрышная сделка, лот сбрасывается.
}
}
if(Lots > Lot*LotF) // Если лот превышает установленный лот, домноженный на LotF, то больше лот не удваивается, а сохраняется таким, какой он есть, до первой выигрышной сделки.
//ПРИМЕР: Lot = 0.01, LotF = 513; Если текущий лот из-за серии убытков стал больше чем 0.01*513 = 5.13, то при дальнейших убытках лот будет сохранять значение 5.13, и когда появится выигрышная сделка, он сбросится до 0.01.
{
Lots = OrderLots();
}
int myColour, cmd;
double myPrice, myPriceClose, myStop, myProfit;
if(myTrades == false)
{
if(buy == true) // BUY
{
cmd = 0;
myPrice = Ask;
myPriceClose = Bid;
myColour = Green;
myStop = Ask - Point*StopLoss;
myProfit = Ask + Point*TakeProfit;
}
if(buy == false) // SELL
{
cmd = 1;
myPrice = Bid;
myPriceClose = Ask;
myColour = Red;
myStop = Bid + Point*StopLoss;
myProfit = Bid - Point*TakeProfit;
}
myTicket = OrderSend(Symbol(),cmd,Lots,myPrice,3,myStop,myProfit,NULL,myMagic,0,myColour); //Открытие сделки.
}
return(0);
}
Вам уже ответили постов 10 вышеo_oЗдравствуйте,
Я написал советник, код которого приведен ниже.
Суть советника в том, что он в самом начале открывает сделку buy, лотом 0.01. Если она выбьет стоп лосс, открывается еще одна сделка в ту же сторону, но удвоенным лотом. Мартингейл короче. Но, это Мартингейл с насыщением так сказать. Если LotFactor поставить 10, то он ограничит рост лота на отметке 5.12(если изначальный был 0.01) и дальше лот изменяться не будет до тех пор, пока не появится выигрышная сделка. Возможно в коде есть ошибка, однако в тестере стратегий этот советник работает четко как надо.
Он нормально тестируется в тестере, но когда я ставлю его на график, он почему-то не торгует. На скриншоте видны настройки и то, что советник включен(смайлик). В журнале единственная строчка: 2013.04.26 15:56:04 Expert PureMartingale EURUSD,H1: loaded successfully. Однако когда я ставлю ручное подтверждение в настройках, он сразу предлагает открыть сделку. Я пробовал данный советник на разных компьютерах с MT4, и на обоих одно и тоже. Подскажите, в чем может быть проблема? Заранее большое спасибо!
Код советника:
PHP:extern int LotFactor=10; //Эта переменная только для удобства оптимизации советника. extern int StopLoss=500; extern int TakeProfit=750; extern double Lot=0.01; //Изначальный лот. double LotF=513; //Это множитель для насыщения. bool buy=true; //Будет ли сделка BUY или SELL int init() { return(0); } int start() { switch(LotFactor) //Тут в зависимости от переменной LotFactor будет выбираться множитель для лота. По умолчанию LotFactor = 10, т.е. множитель (LotF) равен 513. { case 1 : LotF=1.5; break; case 2 : LotF=3; break; case 3 : LotF=5; break; case 4 : LotF=9; break; case 5 : LotF=17; break; case 6 : LotF=33; break; case 7 : LotF=65; break; case 8 : LotF=129; break; case 9 : LotF=257; break; case 10 : LotF=513; break; case 11 : LotF=1025; break; case 12 : LotF=2049; break; default : LotF=513; break; } int total, oldtotal, cnt, myTicket, myMagic=111; bool myTrades = false; total = OrdersTotal(); for(cnt = 0; cnt < total; cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == myMagic) { myTicket = OrderTicket(); myTrades = true; } } double Lots = Lot; // Lots - это лот, на который советник будет торговать. В начале он задается равным тому лоту, что мы ставим в настройках советника. oldtotal = OrdersHistoryTotal(); if(oldtotal > 0) { OrderSelect(oldtotal - 1, SELECT_BY_POS, MODE_HISTORY); //Выбираем предыдущий ордер из истории. if(OrderProfit() > 0) //Если этот предыдущий ордер из истории был выигрышным - меняем направление сделки. { if(OrderType() == OP_BUY) { buy=false; } if(OrderType() == OP_SELL) { buy=true; } } if(OrderProfit() < 0) //Если этот предыдущий ордер из истории был проигрышным - сохраняем направление сделки. { Lots = OrderLots() * 2; // И удваиваем лот. if(OrderType() == OP_BUY) { buy=true; } if(OrderType() == OP_SELL) { buy=false; } } else { Lots = Lot; // Когда попалась выигрышная сделка, лот сбрасывается. } } if(Lots > Lot*LotF) // Если лот превышает установленный лот, домноженный на LotF, то больше лот не удваивается, а сохраняется таким, какой он есть, до первой выигрышной сделки. //ПРИМЕР: Lot = 0.01, LotF = 513; Если текущий лот из-за серии убытков стал больше чем 0.01*513 = 5.13, то при дальнейших убытках лот будет сохранять значение 5.13, и когда появится выигрышная сделка, он сбросится до 0.01. { Lots = OrderLots(); } int myColour, cmd; double myPrice, myPriceClose, myStop, myProfit; if(myTrades == false) { if(buy == true) // BUY { cmd = 0; myPrice = Ask; myPriceClose = Bid; myColour = Green; myStop = Ask - Point*StopLoss; myProfit = Ask + Point*TakeProfit; } if(buy == false) // SELL { cmd = 1; myPrice = Bid; myPriceClose = Ask; myColour = Red; myStop = Bid + Point*StopLoss; myProfit = Bid - Point*TakeProfit; } myTicket = OrderSend(Symbol(),cmd,Lots,myPrice,3,myStop,myProfit,NULL,myMagic,0,myColour); //Открытие сделки. } return(0); }
Вам уже ответили постов 10 вышеo_o
myTicket = OrderSend(Symbol(),cmd,Lots,myPrice,3,0,0,NULL,myMagic,0,myColour);
OrderModify(myTicket, 0, myStop, myProfit, 0, myColour);
Ой, прошу прощения, мне почему-то уведомление не пришло.
Так должно быть нормально?
PHP:myTicket = OrderSend(Symbol(),cmd,Lots,myPrice,3,0,0,NULL,myMagic,0,myColour); OrderModify(myMagic, myPrice, myStop, myProfit, 0, myColour);
а че, смысл есть.. когда на движение знаешь план А и Б, открываешь одновременно.. отработал план А, - фиксим прибыль и идем на план Б..Держите. Только какой в этом смысл?
Простите тупанул вот сов и индюк (( Кто незнает )) Помогите добавить или отремонтируйте сущиствующий трал потомушто етот неработает((
*hi*Уважаемые спецы прошу прикрутить к советнику forex_solomon_eurusd_edu расчёт лота от дэпо так как это сделано в советнике RAY_Scalper_V1_edu (e-f)
С уважением и благодарностью Анатолий.