| / | Форум |
|
chepikds
08.11.2010 03:46
Здравствуйте форумчане!!! ищу скрипт открывающий несколько ордеров с рынка с одинаковым лотом и тейпрофитом. Идея выглядит немного бредовой, но нужен именно такой скрипт, для участия в конкурсе, в случае выигрыша обязуюсь отблагодарить :).
|
|
Организуйте багтрекинг и техсаппорт для своей компании В TeamWox имеются все для того чтобы организовать багтрекинг. Интегрировав модуль Сервисдеск с веб-сайтом, Вы сможете получать заявки своих клиентов напрямую в TeamWox. Более того, вся переписка с клиентами автоматически распознается и попадает в архив, где ее без труда можно найти в будущем. |
|
waitra
08.11.2010 10:31
Нужно открыть какое-то конкретное количество ордеров по одному сигналу в советнике? Или это для ручной торговли?
|
|
chepikds
08.11.2010 11:13
waitra: Нужно открыть какое-то конкретное количество ордеров по одному сигналу в советнике? Или это для ручной торговли? Для ручной, чтоб одним нажатием открывалось несколько ордеров и автоматом устанавливался заданный тейк в пунктах... |
|
waitra
08.11.2010 11:33
chepikds: Для ручной, чтоб одним нажатием открывалось несколько ордеров и автоматом устанавливался заданный тейк в пунктах... //+------------------------------------------------------------------+ //| test.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property show_inputs extern int MaxRisk=2; extern bool Buy=false; //для открытия ордера на покупку extern bool Sell=false; //для открытия ордера на продажу extern int TakeProfit=100; extern int StopLoss=100; //+------------------------------------------------------------------+ int start() {double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} RefreshRates(); if(Buy) NewOrder(OP_BUY,Lot); if(Sell) NewOrder(OP_SELL,Lot); return(0);} //+------------------------------------------------------------------+ double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot);} //+------------------------------------------------------------------+ int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(StopLoss>0) SL=Bid+StopLoss*Point;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE); if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); return(tic);} //+------------------------------------------------------------------+ |
|
VladislavVG
08.11.2010 11:41
waitra: //±-----------------------------------------------------------------+ //| test.mq4 | //| Copyright c 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //±-----------------------------------------------------------------+ Если используете переменные Ask\Bid, то при наличии циклов ожидания нужно обновлять рейты и пересчитывать стопы и тейки непосредственно перед выставлением ордеров. Удачи. ЗЫ Скрипт поправили - добавьте RefreshRates после циклов ожидания. |
|
chepikds
08.11.2010 12:06
waitra: //+------------------------------------------------------------------+ //| test.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ Спасибо, работает, позиции открывает, тейк тоже. не разобрался ещё как объём задавать... |
|
chepikds
08.11.2010 12:08
VladislavVG: Если используете переменные Ask\Bid, то при наличии циклов ожидания нужно обновлять рейты и пересчитывать стопы и тейки непосредственно перед выставлением ордеров. Удачи. ЗЫ Скрипт поправили - добавьте RefreshRates после циклов ожидания. бррр, это куда, подскажите несведущему пожалуйста :) |
|
waitra
08.11.2010 12:16
chepikds: Пожалуйста :-) Лот рассчитываем с риском в % в зависимости от свободных средств (в моем примере 2%), можно поменять % или фиксированный поставить, тут уже смотря для чего использоваться будет. Если полученный объем лота меньше минимального - выдает сообщение.
Спасибо, работает, позиции открывает, тейк тоже. не разобрался ещё как объём задавать... |
|
chepikds
08.11.2010 12:18
waitra: Пожалуйста :-) Лот рассчитываем с риском в % в зависимости от свободных средств (в моем примере 2%), можно поменять % или фиксированный поставить, тут уже смотря для чего использоваться будет. Если полученный объем лота меньше минимального - выдает сообщение. хм, нужен фиксированный лот 1. |
|
VladislavVG
08.11.2010 12:28
chepikds: бррр, это куда, подскажите несведущему пожалуйста :) //+------------------------------------------------------------------+ //| test.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #property show_inputs extern int MaxRisk=2; extern bool Buy=false; //для открытия ордера на покупку extern bool Sell=false; //для открытия ордера на продажу extern int TakeProfit=100; extern int StopLoss=100; //+------------------------------------------------------------------+ int start() {double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} RefreshRates(); if(Buy) NewOrder(OP_BUY,Lot); if(Sell) NewOrder(OP_SELL,Lot); return(0);} //+------------------------------------------------------------------+ double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) return(0.0); return(Lot);} //+------------------------------------------------------------------+ int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена while(!IsTradeAllowed()) Sleep(100); RefreshRates(); // СЮДА !!!!!!!! if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=Ask+TakeProfit*Point; if(StopLoss>0) SL=Ask-StopLoss*Point;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=Bid-TakeProfit*Point; if(StopLoss>0) SL=Bid+StopLoss*Point;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE); if(tic<0) Print("Ошибка открытия ордера: ",GetLastError()); return(tic);} //+------------------------------------------------------------------+ |
|
chepikds
08.11.2010 12:40
VladislavVG: Спасибо. |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий