please any coder can help me
i need code for add hidden trailingstop from broker
thanks in advance
Printable View
please any coder can help me
i need code for add hidden trailingstop from broker
thanks in advance
أخي deloryan لا أعتقد ان ذلك ممكن
ولكن يبقى الفصل للأستاذ أسامة أو أحد الأخوة الأكارم
Find it in Mr Osama EA Attached , otherways u can use close by Cents profit or loss for single trade
, is the inner trailing in the ea, data can be stored in a variable, this is for when the broker uses a stoplevel high and you can not modify orders with short stops
no need modify only u can put regular stoploss profit 0 or hi level to cover ur target then u will close via hidden point or $
الفكره في أنك ستقوم بدلا من عمل مودفاي للأمر ووضع الأستوب الجديد يمكنك عمل مصفوفه وكلما تغير الأستوب تقوم بوضع الاستوب الجديد في المصفوفه ثم تستخدم دالة الإغلاق العاديه عندما يصل السعر إلى الأستوب
مثال قمت بعمل دالة لحفظ أسعار الأستوب الجديده في مصفوفتين قمت بتعريفهم تحفظ رقم التيكيت وسعر الأستوب للصفقه
بإسم
ثم الدالة التي ستحفظ الأسعار ورقم التيكيت للصفقهكود PHP:static double SellOrdersArray[0][2];
static double BuyOrdersArray[0][2];
ثم قمت بعمل دالة ستبحث في المصفوفه فإذا كانت الصفقة برقم التيكيت مخزنه في المصفوفه يقوم بوضع الأستوب الجديد أما إذا كانت غير مخزنه فيقوم بزيادة حجم المصفوفه وتخزين الصفقه الجديدهكود PHP:void HiddenTrailingStop()
{
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int ticket=OrderTicket();double SL=OrderStopLoss();double openprice=OrderOpenPrice();
if(OrderSymbol()==Symbol()&&TrailingStop>0)
{
if(OrderType()==OP_BUY)
{
if(Ask>openprice+TrailingStop*point&&SL<Bid-TrailingStop*point||SL==0)
{
double newprice=Bid-TrailingStop*point;
ModifyNewTrailingStop(ticket,newprice,BuyOrdersArray);
}
}
if(OrderType()==OP_SELL)
{
if(Bid<openprice-TrailingStop*point&&SL>Ask+TrailingStop*point||SL==0)
{
newprice=Ask+TrailingStop*point;
ModifyNewTrailingStop(ticket,newprice,SellOrdersArray);
}
}
}
}
}
ثم قمت بعمل الداله التي ستقارن سعر الأستوب بالسعر الحالي فإذا كان السعر الحالي أقل من الأستوب في حالة الشراء أو أكبر من الأستوب في حالة البيع يتم إغلاق الصفقهكود PHP:void ModifyNewTrailingStop(int ticket,double newprice,double& array[][])
{
int size=ArraySize(array);
for(int i=0;i<size;i++)
{
if(array[i][1]==ticket)
{
array[i][0]=newprice;
return;
}
}
ArrayResize(array,size+1);
array[size][0]=newprice;
array[size][1]=ticket;
}
ثم قمت بعمل دالة ستقوم بحذف مكان الصفقه في المصفوفه لأنها أغلقت وتقوم بتصغير حجم المصفوفه بما أنا أصبحت أقلكود PHP:void CloseTrailingStop()
{
HiddenTrailingStop();
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
int ticket=OrderTicket();
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
for(int j=0;j<ArraySize(BuyOrdersArray);j++)
{
if(ticket==BuyOrdersArray[j][1])
{
if(Bid<BuyOrdersArray[j][0])
{
OrderClose(ticket,OrderLots(),Bid,3);
CleanTheArray(j,BuyOrdersArray);
}
break;
}
}
}
if(OrderType()==OP_SELL)
{
for(j=0;j<ArraySize(SellOrdersArray);j++)
{
if(ticket==SellOrdersArray[j][1])
{
if(Ask>SellOrdersArray[j][0])
{
OrderClose(ticket,OrderLots(),Ask,3);
CleanTheArray(j,SellOrdersArray);
}
break;
}
}
}
}
}
}
وأخيرا الشروط ستكونكود PHP:void CleanTheArray(int index,double& array[][])
{
int size=ArraySize(array);
for(int i=index+1;i<size;i++)
{
array[i][0]=array[i-1][0];
array[i][1]=array[i-1][1];
}
ArrayResize(array,size-1);
}
مرفق الإكسبرت الذي قمت بإجراء التعديل عليه لتراجع الكودكود PHP:if(TrailingStop>0)CloseTrailingStop();
many thanks, this is my code
كود PHP:int TRAIL_virtual_2(int TrailingStop, int Nexp)
{
double Tr_SL,actv,salt;
Tr_SL = TrailingStop * Point;
datetime openTime;
double BID,ASK,SL,openPrice,PrecioMax,PrecioMin;
int i,j,BarrasMINUTO,result;
string NAME;
static int ORDENESant;
RefreshRates();
int Slippage=((ASK-BID)/Point)+1;
if( ORDENESant!=OrdersTotal() ) ObjectsDeleteAll( EMPTY, OBJ_HLINE);
ORDENESant=OrdersTotal();
for ( i = 0; i < OrdersTotal(); i ++)
{//for ( i
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if( OrderMagicNumber()==Nexp && OrderSymbol()==Symbol() )
{//if( OrderMagicNumber()
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
openPrice=NormalizeDouble(OrderOpenPrice(),Digits);
openTime=OrderOpenTime();
SL=NormalizeDouble(OrderStopLoss(),Digits);
BarrasMINUTO = (TimeCurrent()-openTime)/60;
//------ BUYs --------------
if( OrderType()==OP_BUY && TrailingStop>0 )
{
PrecioMax = 0; PrecioMin = Bid*1000;
NAME= "Stop Loss BUY: "+OrderTicket();
for( j=0; j<=BarrasMINUTO; j++ )
{ // Máximo y mínimo desde que se abrio la operación. ( BarrasMINUTO )
if( iHigh(Symbol(),PERIOD_M1,j)>PrecioMax )PrecioMax=iHigh(Symbol(),PERIOD_M1,j);
if( iLow(Symbol(),PERIOD_M1,j)<PrecioMin )PrecioMin=iLow(Symbol(),PERIOD_M1,j);
}
BID = NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits);
if( PrecioMax>(openPrice+Tr_SL) ) {SL=PrecioMax-Tr_SL;}
if( SL>0 && BID<=SL )
{ result=OrderClose(OrderTicket( ),OrderLots(),BID,Slippage,Red);// Primer intento
if ( result==0 ){Sleep(131);result=OrderClose(OrderTicket( ),OrderLots(),BID,Slippage,Red);}// Segundo intento
if ( result==0 ){Sleep(173);result=OrderClose(OrderTicket( ),OrderLots(),BID,Slippage,Red);}// Tercer intento
if ( result==0 ){Sleep(191);result=OrderClose(OrderTicket( ),OrderLots(),BID,Slippage,Red);}// Cuarto intento
if ( result==0 ){Sleep(263);result=OrderClose(OrderTicket( ),OrderLots(),BID,Slippage,Red);}// Quinto intento
if ( result==1 ){Alert(OrderTicket()," BUY Cerrada."); ObjectDelete(NAME);}
}
else
{
ObjectDelete(NAME);
ObjectCreate(NAME, OBJ_HLINE, 0, 0, SL );
ObjectSet(NAME,OBJPROP_WIDTH, 1);
ObjectSet(NAME,OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(NAME,OBJPROP_COLOR, Blue);
}
}
//------ BUYs --------------
//------ SELLs --------------
if( OrderType()==OP_SELL && TrailingStop>0 )
{
PrecioMax =0; PrecioMin = Bid*1000;
NAME= "Stop Loss SELL: "+OrderTicket();
for( j=0; j<=BarrasMINUTO; j++ )
{// Máximo y mínimo desde que se abrio la operación. ( BarrasMINUTO )
if( iHigh(Symbol(),PERIOD_M1,j)>PrecioMax )PrecioMax=iHigh(Symbol(),PERIOD_M1,j);
if( iLow(Symbol(),PERIOD_M1,j)<PrecioMin )PrecioMin=iLow(Symbol(),PERIOD_M1,j);
}
ASK = NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits);
BID = NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits);
double spread = NormalizeDouble(ASK-BID,Digits);
if( PrecioMin<(openPrice-spread - Tr_SL) ) {SL = PrecioMin + Tr_SL;}
if( SL>0 && ASK>=SL )
{
result=OrderClose(OrderTicket( ),OrderLots(),ASK,Slippage,Red); // Primer intento
if ( result==0 ){Sleep(131);result=OrderClose(OrderTicket( ),OrderLots(),ASK,Slippage,Red);}// Segundo intento
if ( result==0 ){Sleep(173);result=OrderClose(OrderTicket( ),OrderLots(),ASK,Slippage,Red);}// Tercer intento
if ( result==0 ){Sleep(191);result=OrderClose(OrderTicket( ),OrderLots(),ASK,Slippage,Red);}// Cuarto intento
if ( result==0 ){Sleep(263);result=OrderClose(OrderTicket( ),OrderLots(),ASK,Slippage,Red);}// Quinto intento
if ( result==1 ){Alert(OrderTicket()," SELL Cerrada."); ObjectDelete(NAME);}
}
else
{
ObjectDelete(NAME);
ObjectCreate(NAME, OBJ_HLINE, 0, 0, SL );
ObjectSet(NAME,OBJPROP_WIDTH, 1);
ObjectSet(NAME,OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet(NAME,OBJPROP_COLOR, Red);
}
}
//------ SELLs --------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
}//if( OrderMagicNumber()
}//for ( i
return;
}
هل الاكسبيرت مضاعفات عكسية ؟؟