-
عرفنا شمعة الدخول,
وعرفنا الرقم اللتسلسلي لصفقات الزوج, وليس كل الصفقات,
والآن نضيف اسم زوج الصفقة
علي شادي, طبق اولا بأول, والردود ممكن حذفها بعد ذلك,
اريد اضمن واحد فاهم, يجيب على الاسئلة لو وجدت.
والاجزاء الاخيرة هنا عن الفكرة, الاسطر التي قد يتم تغييرها لاحقا سوى طريقة البحث في الهستوري,
ملحوظة: الموضوع فكر برمجي وليس برمجة
نحتفظ باسم زوج الصفقة من خلال متغير Pair_Order_Symbol ولابد يكون مصفوفة من بعدين
فيما بعد اذا خلطنا صفقات كل الازواج مع بعض--يكون مصفوفة من بعد واحد
دعاية للموضوع والمنتدى هنا
https://www.forexfactory.com/showthr...1#post10070851
-
-
الان سنؤجل بقية اجزاء الفكرة الى وقت لاحق ونكتفي باسما الصفقات ووقت الدخول ونذهب الى تصميم صفحة العرض
ثم بعد ذلك نعود للفكرة نكمل نواقصها ونرى النتائج في صفحة الصفقات اول بأول مع كل تحديث.
اذن عرفنا:
1) زوج الصفقة
2) وقت دخول الصفقة--شمعتها
3) تسلس صفقات الزوج
4) نوع الصفقة بيع ام شراء
وفقط
-
-
إذن نحدد العناوين الرئيسة لكل عمود-اول صف اعلاه- لكي تعرف معنى كل عمود هل هو التسلسل ام نوع العملية ام اسم زوج الصفقة الخ.
ولاننسى الاولية العقلية, ان سعر الدخول هو افتتاح شمعة الدخول--نحن عمليا عرفنا هذه القيمة وتبقى فقط حفظها في البرنامج.
سعر الدخول كل صفقة لكل زوج سيتم تعريفه بالمتغير Pair_Entry_Price وطبعا مصفوفة من بُعدين حتى الآن, قبل مرحلة الخلاط mixer
وأي مبرمج يدرك انه لابد يكون من نوع double لأن الأسعار عَشرية.
-
ولاشك نأخذ السعر عند الشمعة رقم j لأنها دائما هي الشمعة بعد تحقق الشرط
http://www11.0zz0.com/2017/07/10/22/314122609.png
-
والآن مع عناوين صفحة العرض,
أرى التالي وقد يكون لديكم فيما بعد اراء افضل بكثير, فالناس بعضهم ألحن من بعض في الحجة اذا تساوت معارفهم.
أرى: (حتى الآن لا أريكم الا ما أرى) ان نجعل الأعمدة كالتالي:
العمود الأول: الرقم التسلسلي ونسميه هاش "#"
العمود الثاني: رقم شمعة الدخول ونسميه CE اختصار CandleEntry
العمود الثالث: تاريخ وقت الدخول ويعرض على نمط 2017.07.12 00:00 EntryT
العمود الرابع: شمعة الخروج--لم نتحدث عنها حتى الان CX
العمود 5: وقت الخروج ExitT
العمود 6: نوع العملية Type
العمود 7: اسم الزوج Symbol
العمود 8: السعر الحالي Cprice
العمود 9: سعر الدخول EntryP
العمود 10: سعر الخورج ExitP
العمود 11: اعلى سعر بين الدخول والخورج HEE
العمود 12: ادنى سعر بين الدخول والخروج LEE
العمود 13: الربح او الخسارة المحققة بالنقاط PPips
العمود 14: افضل ربح تحققق بين الدخول والخروج BestP
العمود 15: اسؤا خسارة تحققت بين الدخول والخروج. WorstP
ونؤجل ماعدا ذلك.
-
نضغها في الاخير لنضمن ان العرض بعد كل التغييرات--في اخر OnTimer
يفترض دالة مستقلة ولكن فيما بعد
http://www8.0zz0.com/2017/07/10/23/990807177.png
-
قيم yy2 اعلاه ممكن فيما بعد تعديلها حسب مساحة القيمة التي توضع
مثلا قيمة "1.27878" سبعة حروف بينما قيمة التاريخ "F2017.09.12 04:00" عبارة 17 حرف,
AA هي الازاحة للكل عن يسار التشارت
rr الازاحة التراكمية لكل عمود, اي ازاحة العمود السابق الكلية + ازاحة هذا العمود
وبالتالي:
rr=rr+yy2
وتم تسمية روؤس كل عمود بـ Heading ثم اندرسكور زايد رقم العمود التسلسلي من اليسار الى اليمين
الآن هناك حالتين للعرض:
عرض الصفقات
أو
عرض الدروداون-رن اب--يعني يمسكها من اول يوم ثم يشوف كم الاكويتي بنهاية كل يوم واسؤا دردوداون حدث شاملة عدد الصفقات المفتوحة او المغلقة حتى ذلك اليوم, من اول يوم وحتى هذا اليوم وايضا الدردوداون النسبي لهذا اليوم مقارنة باليوم السابق حتى لو كانت النتائج الكلية موجبة
-
إذن لابد نعرف متغير SELECTOR للاختيار بين عرض الصفقات POSITIONS و عرض تاريخ الحساب HISTORY
لغة انجليزية
SELECTOR اختيار
سنختار الديفولت POSITIONS
-
-
ولو تلاحظ نتحاشى هنا المتغيرات الخارجية بالشكل المألوف ونعتمد نظرية "ارسم ثم ادعس" -- يعني نعتمد الضغط على الاشياء لاختيار القيم بالماوس فقط,
وبالتالي نحن بحاجة الى شيئين اضافيين على التشارت:
1) شيء نضغط عليه فيعرض الصفقات
2) شيء آخر نضغط عليه فيعرض سيرة الحساب
سيكون اسم الشيء الاول نفس قيمته واسم الشيء الثاني نفس قيمته ايضا-لايوجد مايمنع وسنعرضها على التشارت ايضا دوائر منجمة صغيرة.
ولاننسى ماذكرناه لكي يتم تفعيلها لابد من خلال OnChartEvent
لاتنسى الاغنية: ارسم في OnTimer وفعل في OnChartEvent
وبصريا الشيء الذي اخترناه سيكون لون دائرته المنجمة اخضر والشيء الاخر لونه رمادي
وندنقرز 174
http://www2.0zz0.com/2017/07/11/15/250141906.png
-
-
كود PHP:
string SELECTOR ="POSITIONS";
string str;
string S[] = {"EUR" ,"GBP" ,"AUD" ,"NZD" ,"USD" ,"CAD" ,"CHF" ,"JPY"};
string pairs[28];
string pair_0[28];
int NoOfCandles=50;
int OnInit()
{
ChartSetInteger(0,CHART_FOREGROUND,0,FALSE);
ChartSetInteger(0,CHART_COLOR_BACKGROUND,clrBlack);
ChartSetInteger(0,CHART_COLOR_CHART_LINE,ChartGetInteger(0,CHART_COLOR_BACKGROUND));
ChartSetInteger(0,CHART_MODE,CHART_LINE);
ChartSetInteger(0,CHART_SHOW_GRID,0,FALSE);
ChartSetInteger(0,CHART_SHOW_OHLC,0,FALSE);
ChartSetInteger(0,CHART_SHOW_BID_LINE,0,FALSE);
ObjectCreate( "CHART_HIDE",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_HIDE",OBJPROP_CORNER,0);
ObjectSet( "CHART_HIDE",OBJPROP_XDISTANCE,5);
ObjectSet( "CHART_HIDE",OBJPROP_YDISTANCE,25);
ObjectSetText("CHART_HIDE",CharToStr(108),12,"wingdings",clrRed);
ObjectCreate( "CHART_CANDLES",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_CANDLES",OBJPROP_CORNER,0);
ObjectSet( "CHART_CANDLES",OBJPROP_XDISTANCE,25);
ObjectSet( "CHART_CANDLES",OBJPROP_YDISTANCE,25);
ObjectSetText("CHART_CANDLES",CharToStr(108),12,"wingdings",clrYellow);
ObjectCreate( "CHART_LINE",OBJ_LABEL,0,0,0);
ObjectSet( "CHART_LINE",OBJPROP_CORNER,0);
ObjectSet( "CHART_LINE",OBJPROP_XDISTANCE,45);
ObjectSet( "CHART_LINE",OBJPROP_YDISTANCE,25);
ObjectSetText("CHART_LINE",CharToStr(108),12,"wingdings",clrWhite);
EventSetTimer(1);
str =StringSubstr(Symbol(),6,10);
///////////////////////////
int j=-1;
for(int i=0;i<=6;i++)
{
for(int k=i+1;k<=7;k++)
{
j++;
pairs[j]=S[i]+S[k]+str;
pair_0[j]=pairs[j];
}
}
return(INIT_SUCCEEDED);
}
////////////////////////
void OnTimer()
{
ChartSetInteger(0,CHART_FOREGROUND,0,BackOrForeground);
ChartSetInteger(0,CHART_COLOR_CHART_LINE,LineColor);
ChartSetInteger(0,CHART_MODE,ChartMode);
for(int i=0;i<28;i++)
{
if(pair_0[i]==pairs[i]) color clr=clrLime;
else clr=clrWhite;
ObjectCreate( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJ_LABEL,0,0,0);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_CORNER,0);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_XDISTANCE,20);
ObjectSet( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_YDISTANCE,50+i*13);
ObjectSetText( "B_"+StringSubstr(pairs[i],0,6)+"_"+i, StringSubstr(pairs[i],0,6),9,"Tahoma",clr);
//
ObjectCreate( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJ_LABEL,0,0,0);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_CORNER,0);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_XDISTANCE,5);
ObjectSet( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, OBJPROP_YDISTANCE,50+i*13);
ObjectSetText( "A_"+StringSubstr(pairs[i],0,6)+"_"+i, CharToStr(110),9,"wingdings",clr);
}
ObjectCreate( "ACTIVATE_ALL",OBJ_LABEL,0,0,0);
ObjectSet( "ACTIVATE_ALL",OBJPROP_CORNER,0);
ObjectSet( "ACTIVATE_ALL",OBJPROP_XDISTANCE,25);
ObjectSet( "ACTIVATE_ALL",OBJPROP_YDISTANCE,425);
ObjectSetText("ACTIVATE_ALL",CharToStr(110),12,"wingdings",clrLime);
ObjectCreate( "CANCEL_ALL",OBJ_LABEL,0,0,0);
ObjectSet( "CANCEL_ALL",OBJPROP_CORNER,0);
ObjectSet( "CANCEL_ALL",OBJPROP_XDISTANCE,45);
ObjectSet( "CANCEL_ALL",OBJPROP_YDISTANCE,425);
ObjectSetText("CANCEL_ALL",CharToStr(110),12,"wingdings",clrGray);
ObjectCreate( "REMOVE_EXPERT",OBJ_LABEL,0,0,0);
ObjectSet( "REMOVE_EXPERT",OBJPROP_CORNER,0);
ObjectSet( "REMOVE_EXPERT",OBJPROP_XDISTANCE, 195);
ObjectSet( "REMOVE_EXPERT",OBJPROP_YDISTANCE, 0);
ObjectSetText( "REMOVE_EXPERT",CharToStr(255),18,"Wingdings",clrWhite);
ObjectCreate( "CLEAN_CHART",OBJ_LABEL,0,0,0);
ObjectSet( "CLEAN_CHART",OBJPROP_CORNER,0);
ObjectSet( "CLEAN_CHART",OBJPROP_XDISTANCE,145);
ObjectSet( "CLEAN_CHART",OBJPROP_YDISTANCE,0);
ObjectSetText("CLEAN_CHART","DEL",15,"Times New Roman",clrWhite);
if(SELECTOR=="POSITIONS") color SelClr=clrLime;
else SelClr=clrGray;
ObjectCreate( "POSITIONS",OBJ_LABEL,0,0,0);
ObjectSet( "POSITIONS",OBJPROP_CORNER,0);
ObjectSet( "POSITIONS",OBJPROP_XDISTANCE,400);
ObjectSet( "POSITIONS",OBJPROP_YDISTANCE,0);
ObjectSetText("POSITIONS",CharToStr(174),12,"wingdings",SelClr);
if(SELECTOR=="HISTORY") SelClr=clrLime;
else SelClr=clrGray;
ObjectCreate( "HISTORY",OBJ_LABEL,0,0,0);
ObjectSet( "HISTORY",OBJPROP_CORNER,0);
ObjectSet( "HISTORY",OBJPROP_XDISTANCE,420);
ObjectSet( "HISTORY",OBJPROP_YDISTANCE,0);
ObjectSetText("HISTORY",CharToStr(174),12,"wingdings",SelClr);
ObjectCreate( "Object_Name",OBJ_LABEL,0,0,0);
ObjectSet( "Object_Name",OBJPROP_CORNER,0);
ObjectSet( "Object_Name",OBJPROP_XDISTANCE,245);
ObjectSet( "Object_Name",OBJPROP_YDISTANCE,0);
ObjectSetText("Object_Name",Object_Name,11,"Times New Roman",clrWhite);
/////////////////////////
int PairTotallPosition[28];
int PairPositionSerial[28][200];
int PairEntryCandle[28][200];
string Pair_Order_Type[28][200];
string Pair_Order_Symbol[28][200];
double Pair_Entry_Price[28][200];
/////////////////////
for(i=0;i<=27;i++)
{//for(i=0;i<28;i++)
PairTotallPosition[i]=-1;
if(pairs[i]==pair_0[i])
{//if(pairs[i]==pair_0[i])
for(int j=NoOfCandles;j>=1;j--)
{//for(int j=0;j<=NoOfCandles;j++)
double x0=iAO(pair_0[i],0,j+1);
double x1=iAO(pair_0[i],0,j+2);
if((x0<=0 && x1>=0) || (x0>=0 && x1<=0))
{//if((x0<0 && x1>0) || (x0>0 && x1<0))
PairTotallPosition[i]++;
int m=PairTotallPosition[i];
PairPositionSerial[i][m]=m;
PairEntryCandle[i][m]=j;
Pair_Order_Symbol[i][m]=pair_0[i];
Pair_Entry_Price[i][m]=iOpen(pair_0[i],0,j);
if(x0>=0 && x1<=0)
{
Pair_Order_Type[i][m]="BUY";
}
if(x0<=0 && x1>=0)
{
Pair_Order_Type[i][m]="SELL";
}
}//if((x0<0 && x1>0) || (x0>0 && x1<0))
//--
//-
//-
}//for(int j=0;j<=NoOfCandles;j++)
}//if(pairs[i]==pair_0[i])
}//for(i=0;i<28;i++)
int yy2[]={0,40,40,40,40,40,60,80,60,60,60,80,60,60,60,90,90,90,90,90,90,90,90,90,90};
int AA=100;
int rr;
string Heading[]={"#","CE","EntryT","CX","EntryT","Type","Symbol","Cprice","EntryP","ExitP","HEE","LEE","PPips","BestP","WorstP"};
for(j=0;j<=14;j++)
{
rr=rr+yy2[j];
ObjectCreate( "Heading_"+j,OBJ_LABEL,0,0,0);
ObjectSet( "Heading_"+j,OBJPROP_CORNER,0);
ObjectSet( "Heading_"+j,OBJPROP_XDISTANCE, AA+rr);
ObjectSet( "Heading_"+j,OBJPROP_YDISTANCE, 50);
ObjectSetText( "Heading_"+j,Heading[j],8,"Tahoma",clrWhiteSmoke);
}
if(SELECTOR=="POSITIONS")
{
}
else if(SELECTOR=="HISTORY")
{
}
}//OnTimer
//////////////////////////////////////////////
string Object_Name;
//////////////////////////////////////////////
bool BackOrForeground=false;
ENUM_CHART_MODE ChartMode=CHART_LINE;
color LineColor=ChartGetInteger(0,CHART_COLOR_BACKGROUND);
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK)
{
//////////////////////////
if(sparam=="POSITIONS") SELECTOR="POSITIONS";
if(sparam=="HISTORY") SELECTOR="HISTORY" ;
if(sparam=="CHART_HIDE")
{
LineColor=ChartGetInteger(0,CHART_COLOR_BACKGROUND);
ChartMode=CHART_LINE;
BackOrForeground=false;
}
if(sparam=="CHART_CANDLES")
{
LineColor=clrOrange;
ChartMode=CHART_CANDLES;
BackOrForeground=true;
}
if(sparam=="CHART_LINE")
{
LineColor=clrOrange;
ChartMode=CHART_LINE;
BackOrForeground=true;
}
Object_Name=sparam;
if(StringSubstr(sparam,0,2)=="A_")
{
int I1=StrToInteger(StringSubstr(sparam,9,StringLen(sparam)-9));
pair_0[I1]="YYYXXX";
}
if(StringSubstr(sparam,0,2)=="B_")
{
int I2=StrToInteger(StringSubstr(sparam,9,StringLen(sparam)-9));
pair_0[I2]=pairs[I2];;
}
if(sparam=="CANCEL_ALL")
{
for(int k=0;k<=27;k++) pair_0[k]="YYYXXX";
}
if(sparam=="ACTIVATE_ALL")
{
for( k=0;k<=27;k++) pair_0[k]=pairs[k];
}
if(sparam=="CLEAN_CHART") ObjectsDeleteAll();
if(sparam=="REMOVE_EXPERT") {ObjectsDeleteAll();ExpertRemove();}
/////////////////////////////////////////
}
}
-
بسم الله الرحمن الرحيم
نريد ان نحتفظ بعدد مرات قطع الصفر لكل زوج؟ بالمنطق اين نضعها؟
نحن من خلال المتغير المصفوفة PairTotallPosition قد عرفناها لكل زوج.
بناء عليه في الكود السابق نضعه مع لوووب A_ و _B--يعني الازواج ومربعاتها بحيث يكون هناك عمود ثالث يعرض عدد مرات القطع (والتي هي عمليا عدد الصفقات)
ومكانها يجب ان يكون بعد الحسبة, وإذا لم يكن هناك عمليات نضع شرطة "-"
إذن:
http://www11.0zz0.com/2017/07/12/21/928144790.png