Друзья помогите пожалуйста!!! Нужен скрипт или советник, который закрывает часть прибыли!! - страница 3

 
dodox:

Хорошо, предупреждение понял!!! Вопрос, а почему Вы Кимовский Без убыток не удалили, а Этот трал в течении 2 мин? Как то не правильно?


Вы выложили декомпилированный софт. А никакому разработчику не понравится когда его труды взламывают.

Игорь Ким выкладывал всегда только оригинальный код (все им и пользуются).

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

 
Интересно чем он сейчас занимается и где.... сюда раз в год заходит, на его сайте, работы, обновляются и поступают новые, редко. Игорь сам торгует?
 

Вот нашел то что искал!!! Всем спасибо за диалог!!!

С Уважением!!!

Отдам в хорошие руки :) :



/*
Эксперт для сопровождения открытых ордеров.

При достижении ордером заданной прибыли выполняет его частичное закрытие, количество уровней
закрытия не ограничено. Дополнительная функция - трейлингстоп с параметром начальной прибыли,
уровнем трейлинга и шагом трейлинга.

*/

#property copyright "http://dmffx.com"
#property link "http://dmffx.com"

extern bool PartClose_ON = true; // Включение функции частичного закрытия
extern string Levels = "20/50/200"; // Уровни закрытия. Например, при параметрах 10/20/5 первое закрытие выполняется при достижении ордером прибыли в 10 пунктов, затем еще через 20 пунктов и еще через 5 пунктов.
extern string Percents = "50/25/25"; // Процент закрытия (через разделитель "/") для соответствующего уровня. Здесь отсчет идет от лота первого ордера. Если исходный ордер открыт с лотом 1.0 лот, закрывается 50% - 0.5, затем 25% от 1.0 - 0.3 и наконец 0.2
extern int Slippage = 3; // Допустимое отклонение от запрошенной цены
extern string s0 = "=== Trailing ===";
extern bool Trailing_ON = true; // Включение трейлинга
extern int TrailingStartProfit = 20; // Прибыль в пунктах с которой начинает работу трейлинг
extern int TrailingStopLevel = 30; // Уровень стоплосс
extern int TrailingStep = 1; // Шаг трейлинга
extern bool TrailingOnce = true; // Разовая установка стоплосс при достижении прибыли (безубыток).
extern string s1 = "=== Tester ===";
extern bool TesterBuy = false; // Работает только в тестере - открывает ордер Buy для проверки
extern bool TesterSell = false; // Работает только в тестере - открывает ордер Sell для проверки
extern string Symbol_0 = " ---- Используемые валюты ---- ";
extern string Symbol_1 ="EURUSD";
extern string Symbol_2 ="GBPUSD";
extern string Symbol_3 ="AUDUSD";
extern string Symbol_4 ="NZDUSD";
extern string Symbol_5 ="EURGBP";
extern string Symbol_6 ="USDJPY";
extern string Symbol_7 ="EURJPY";
extern string Symbol_8 ="CHFJPY";
extern string Symbol_9 ="AUDJPY";
extern string Symbol_10="CADJPY";
extern string Symbol_11="GBPJPY";
extern string Symbol_12="EURCHF";
extern string Symbol_13="USDCHF";
extern string Symbol_14="GBPCHF";
extern string Symbol_15="CADCHF";
extern string Symbol_16="NZDCHF";
extern string Symbol_17="AUDCHF";
extern string Symbol_18="USDCAD";
extern string Symbol_19="EURCAD";
extern string Symbol_20="AUDCAD";
extern string Symbol_21="NZDCAD";
extern string Symbol_22="CHFCAD";
extern string Symbol_23="GBPCAD";



//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+

string gvp;
int Lev[];
int Per[];
double tik,tik1,tik2;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){
if(IsTesting()){
for(int i=GlobalVariablesTotal()-1;i>=0;i--){
if(StringFind(GlobalVariableName(i),gvp,0)==0){
GlobalVariableDel(GlobalVariableName(i));
}
}
}

string tmpArr[];

fSplitStrToStr(Levels,tmpArr,"/");
ArrayResize(Lev,ArraySize(tmpArr));

for(i=0;i<ArraySize(tmpArr);i++){
Lev[i]=StrToInteger(tmpArr[i]);
}
for(i=1;i<ArraySize(tmpArr);i++){
Lev[i]+=Lev[i-1];
}
fSplitStrToStr(Percents,tmpArr,"/");
ArrayResize(Per,ArraySize(tmpArr));

for(i=0;i<ArraySize(tmpArr);i++){
Per[i]=StrToInteger(tmpArr[i]);
Print(Per[i]);
}

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

if(IsTesting()){
for(int i=GlobalVariablesTotal()-1;i>=0;i--){
if(StringFind(GlobalVariableName(i),gvp,0)==0){
GlobalVariableDel(GlobalVariableName(i));
}
}
}


//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start(){

if(IsTesting()){
if(OrdersTotal()==0){
if(TesterBuy)OrderSend(Symbol(),OP_BUY,1.0,NormalizeDouble(Ask,Digits),0,NormalizeDouble(Ask-Point*20,Digits),0,NULL,0,0,CLR_NONE);
if(TesterSell)OrderSend(Symbol(),OP_SELL,1.0,NormalizeDouble(Bid,Digits),0,NormalizeDouble(Bid+Point*20,Digits),0,NULL,0,0,CLR_NONE);
}
}

tik=Bid;
if(tik!=tik1){tik1=tik;tik2++;}
if(tik2==24)tik2=0;
if(tik2==1)robot(Symbol_1);
if(tik2==2)robot(Symbol_2);
if(tik2==3)robot(Symbol_3);
if(tik2==4)robot(Symbol_4);
if(tik2==5)robot(Symbol_5);
if(tik2==6)robot(Symbol_6);
if(tik2==7)robot(Symbol_7);
if(tik2==8)robot(Symbol_8);
if(tik2==9)robot(Symbol_9);
if(tik2==10)robot(Symbol_10);
if(tik2==11)robot(Symbol_11);
if(tik2==12)robot(Symbol_12);
if(tik2==13)robot(Symbol_13);
if(tik2==14)robot(Symbol_14);
if(tik2==15)robot(Symbol_15);
if(tik2==16)robot(Symbol_16);
if(tik2==17)robot(Symbol_17);
if(tik2==18)robot(Symbol_18);
if(tik2==19)robot(Symbol_19);
if(tik2==20)robot(Symbol_20);
if(tik2==21)robot(Symbol_21);
if(tik2==22)robot(Symbol_22);
if(tik2==23)robot(Symbol_23);

return(0);
}
//+------------------------------------------------------------------+

int robot(string a_symbol_0){
gvp="PartCloseAndTrailing_"+a_symbol_0+"_";
if(IsTesting())gvp=gvp+"t_";
if(IsDemo())gvp=gvp+"d_";
if(PartClose_ON){
for(int i=OrdersTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==a_symbol_0){
int ParentTicket=0;
int oNum=0;
double oLots=OrderLots();
ParentTicket=fGetParentTicket(OrderComment());
if(ParentTicket!=0){
if(GlobalVariableCheck(gvp+ParentTicket+"_Num")){
oNum=GlobalVariableGet(gvp+ParentTicket+"_Num")+1;
}
if(GlobalVariableCheck(gvp+ParentTicket+"_Lots")){
oLots=GlobalVariableGet(gvp+ParentTicket+"_Lots");
}
}
GlobalVariableSet(gvp+OrderTicket()+"_Num",oNum);
GlobalVariableSet(gvp+OrderTicket()+"_Lots",oLots);
if(oNum>=ArraySize(Lev))oNum=ArraySize(Lev)-1;
RefreshRates();
if(OrderType()==OP_BUY){
if(ND(Bid-OrderOpenPrice())>=ND(Point*Lev[oNum])){
double LotsClose=fLotsNormalize(Per[oNum]*oLots/100.0);
if(LotsClose>0){
LotsClose=MathMin(LotsClose,OrderLots());
if(!OrderClose(OrderTicket(),LotsClose,ND(Bid),Slippage,CLR_NONE)){
Print("Close error "+GetLastError());
}
}
}
}
if(OrderType()==OP_SELL){
if(ND(OrderOpenPrice()-Ask)>=ND(Point*Lev[oNum])){
LotsClose=fLotsNormalize(Per[oNum]*oLots/100.0);
if(LotsClose>0){
LotsClose=MathMin(LotsClose,OrderLots());
if(!OrderClose(OrderTicket(),LotsClose,ND(Ask),Slippage,CLR_NONE)){
Print("Close error "+GetLastError());
}
}
}
}
}
}
else{
return(0);
}
}
}
if(Trailing_ON)fUniTrailingStop(a_symbol_0);
return(0);
}

int fGetParentTicket(string aComment){
int tPos1=StringFind(aComment,"from");
if(tPos1>=0){
int tPos2=StringFind(aComment,"#");
if(tPos2>tPos1){
return(StrToInteger(StringSubstr(aComment,tPos2+1,StringLen(aComment)-tPos2-1)));
}
}
return(0);
}

double fLotsNormalize(double aLots){
aLots-=MarketInfo(Symbol(),MODE_MINLOT);
aLots/=MarketInfo(Symbol(),MODE_LOTSTEP);
aLots=MathRound(aLots);
aLots*=MarketInfo(Symbol(),MODE_LOTSTEP);
aLots+=MarketInfo(Symbol(),MODE_MINLOT);
aLots=NormalizeDouble(aLots,2);
return(aLots);
}

double ND(double v){return(NormalizeDouble(v,Digits));}

int fSplitStrToStr(string aString,string & aArray[],string aDelimiter){
string tmp_str="";
string tmp_char="";
ArrayResize(aArray,0);
for(int i=0;i<StringLen(aString);i++){
tmp_char=StringSubstr(aString,i,1);
if(tmp_char==aDelimiter){
if(StringTrimLeft(StringTrimRight(tmp_str))!=""){
ArrayResize(aArray,ArraySize(aArray)+1);
aArray[ArraySize(aArray)-1]=tmp_str;
}
tmp_str="";
}
else{
if(tmp_char!=" ")tmp_str=tmp_str+tmp_char;
}
}
if(StringTrimLeft(StringTrimRight(tmp_str))!=""){
ArrayResize(aArray,ArraySize(aArray)+1);
aArray[ArraySize(aArray)-1]=tmp_str;
}
return(ArraySize(aArray));
}

void fUniTrailingStop(string a_symbol_0){
for(int i=0;i<OrdersTotal();i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==a_symbol_0){
RefreshRates();
if(OrderType()==OP_BUY){
double tOrderProfit=ND(Bid-OrderOpenPrice());
if(tOrderProfit>=ND(Point*TrailingStartProfit)){//есть прибыль
double BeLevel=ND(OrderOpenPrice()+Point*(TrailingStartProfit-TrailingStopLevel));
if(TrailingOnce){
double slts=BeLevel;
}
else{
if(ND(Bid-Point*TrailingStopLevel)>ND(OrderStopLoss()+Point*TrailingStep-Point)){
slts=MathMax(BeLevel,ND(Bid-Point*TrailingStopLevel));
}
else{
slts=BeLevel;
}
}
if(ND(OrderStopLoss())<slts){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
int Check=GetLastError();
Print("Trailing BUY "+OrderTicket()+" error "+Check);
}
}
}
}
if(OrderType()==OP_SELL){
tOrderProfit=ND(OrderOpenPrice()-Ask);
if(tOrderProfit>=ND(Point*TrailingStartProfit)){//есть прибыль
BeLevel=ND(OrderOpenPrice()-Point*(TrailingStartProfit-TrailingStopLevel));
if(TrailingOnce){
slts=BeLevel;
}
else{
if(ND(Ask+Point*TrailingStopLevel)<ND(OrderStopLoss()-Point*TrailingStep+Point) || ND(OrderStopLoss())){
slts=MathMin(BeLevel,ND(Ask+Point*TrailingStopLevel));
}
else{
slts=BeLevel;
}
}
if(ND(OrderStopLoss())>slts || ND(OrderStopLoss())==0){
if(!OrderModify(OrderTicket(),OrderOpenPrice(),slts,OrderTakeProfit(),0,CLR_NONE)){
Check=GetLastError();
Print("Trailing SELL "+OrderTicket()+" error "+Check);
}
}
}
}
}
}
}
}