EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: zidane19 on มีนาคม 28, 2017, 11:36:21 am
-
double Lot=0.1;
int SL=15;
int TP=15;
string SymX="GBPJPY";
OrderSend(SymX,OP_BUY,Lot,MarketInfo(SymX,MODE_ASK),3,MarketInfo(SymX,MODE_ASK)-(Point*SL),MarketInfo(SymX,MODE_ASK)+(Point*TP),"Test",0,0,green);
โค๊ดด้านบน ไม่ผ่านครับ
แต่โค๊ดด้านล่าง ผ่านครับ
OrderSend("GBPJPY",OP_BUY,Lot,MarketInfo("GBPJPY",MODE_ASK),3,MarketInfo("GBPJPY",MODE_ASK)-(Point*SL),MarketInfo("GBPJPY",MODE_ASK)+(Point*TP),"Test",0,0,green);
ปัญหาผมคือตัวแปร SymX ครับ ทำไมไม่แทนค่า ชื่อ ซิมโบล ที่มีชื่อว่า "GBPJPY" ครับผม
ถ้าใส่ตรงๆ "GBPJPY" หรือเอาค่า Symbol(); ไปใส่แทน จะผ่าน
แต่ถ้าเอาตัวแปร ไปใส่แทน ( SymX ) ไม่ผ่านทันทีครับ และไม่มี Error ด้วยครับ ( ถ้ามีเออเร่อร์ ก็ยังพอต่อสู้กับกู้เกิ้ลบ้าง น่ะครับ )
ผมรบกวนด้วยนะครับ
-
ต่อจากด้านบน
SymX ด้านล่างนี้ แทนค่า Symbol(); ได้ครับ
double iMac=iMACD(SymX,TF,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
แต่ทำไม OrderSend แทนค่าไม่ได้ครับ
-
ผม สงสัยที่ Point ครับ
ผมสั่ง Print(Point); ออกมา มันมีค่าเป็น 0 ครับ
ทำให้มันคูณ SL หรือ TP แล้ว จะได้ค่า Ask ตัวเดิม
ตลาดก็เลยไม่ยอมให้ซื้อขายครับ ( ราคาเปิด+SL+TP เท่ากัน )
แต่ขออนุญาต ขอความรู้เรื่อง Point เพิ่มเติมครับ ว่ามันทำงานยังไงครับ
ปรกติมันก็ไม่เป็นอะไรนะครับ ผมก็ใช้ตามที่หนังสือสอนมา
แต่คราวนี้ ผมมาเขียน แบบว่า ให้เข้าออเดอร์ คู่เงิน ที่ไม่มีอีเอ ติดตั้งอยู่น่ะครับ ก็เลยต้องใช้ Makeinfo เข้าช่วย
รบกวนผู้รู้ด้วยนะครับ ขอบคุณครับ
ปล.ตอนนี้ก็แก้เบื้องต้นไปก่อน โดยให้คู่เงินที่มี Point เท่ากัน สุ่มค่าที่ต้องการร่วมกันไปก่อนครับ เช่นพวก GJ EJ UJ เป็นต้นครับ
-
////////////////////////////////////////////////////////////
Point คืออย่างนี้ครับ
เช่น
1.11111 Point = 0.00001
1.1111 Point = 0.0001
0.111 Point = 0.001
ปริั้นตัวมันก็จะได้เท่านี้ครับ
////////////////////////////////////////////////////////////
double Lot=0.1;
int SL=100;
int TP=100;
string SymX="GBPJPY";
OrderSend(SymX,OP_BUY,Lot,MODE_ASK,3,MarketInfo(SymX,MODE_ASK)-SL*MarketInfo(SymX,MODE_POINT),MarketInfo(SymX,MODE_ASK)+TP*MarketInfo(SymX,MODE_POINT),"Test",0,0,Green);
}
และอย่าลืมว่า ค่า SL,TP ควรมีค่ามากกว่าหรือเท่ากับค่าในรูปครับ
เดี่ยวผมงมหาด้วยว่าแก้ยังไง
-
โอ้ว ต้องขอขอบคุณ คุณtanakrit99 มากๆ ครับ เมื่อชั่วโมงที่แล้ว ผมได้ใช้วิธีนี้ไปพลางๆ ครับ
//digit&poi
int Digit=MarketInfo(SymX,MODE_DIGITS);
double Poi=0;
if(Digit==2){Poi=0.01;}
if(Digit==3){Poi=0.001;}
if(Digit==4){Poi=0.0001;}
if(Digit==5){Poi=0.00001;}
Print(Digit,"===",Poi);
//digit&poi
แต่ทว่า เจอวิธีแก้ของคุณเข้า (ไฮไลด์สีส้ม) คงต้องใช้แบบของคุณแล้วหล่ะครับ เพราะลดบรรทัดได้พอควรครับ
ขอบคุณมากๆ เลยนะครับ
-
ลองดูตรง stoplevel ครับ MarketInfo(SymX,MODE_STOPLEVEL)
ถ้าตัวนี้มากกว่า SL หรือ TP ก็น่าจะเปิด order ไม่ได้นะ
หรือทดลองเปิด order แบบยังไม่ใช้ SL กับ TP ดูก่อน
ปล. ผมแค่ดูตัวอย่างนะไม่ได้ทดลอง code จริง ๆ
-
ขอบคุณ คุณ bird2000 มากๆ เลยครับ
ที่ให้ความรู้เพิ่มเติม
เรื่อง MarketInfo(SymX,MODE_STOPLEVEL);
ปัญหาของผมแก้ได้แล้วครับ มันเป็นกับ การใช้ Point ที่ไม่อ้าง ฟังก์ชั่น Marketinfo
เนื่องจากผมใช้ระบบ การเรียก คู่เงิน ที่อีเอ ไม่ได้รันอยู่น่ะครับ
ถ้าอ้างคู่เงิน ที่อีเอรันอยู่ ก็ใช้ Point ธรรมดาได้ครับ...