EA Programing => ปัญหาที่พบในการเขียน EA => Topic started by: zidane19 on มีนาคม 28, 2017, 11:36:21 am

Title: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post 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 ด้วยครับ ( ถ้ามีเออเร่อร์ ก็ยังพอต่อสู้กับกู้เกิ้ลบ้าง น่ะครับ )

ผมรบกวนด้วยนะครับ
Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: zidane19 on มีนาคม 28, 2017, 05:43:33 pm
ต่อจากด้านบน


SymX ด้านล่างนี้ แทนค่า Symbol(); ได้ครับ

double iMac=iMACD(SymX,TF,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

แต่ทำไม OrderSend แทนค่าไม่ได้ครับ

Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: zidane19 on มีนาคม 28, 2017, 06:09:46 pm
ผม สงสัยที่ Point ครับ

ผมสั่ง Print(Point); ออกมา มันมีค่าเป็น 0 ครับ

ทำให้มันคูณ SL หรือ TP แล้ว จะได้ค่า Ask ตัวเดิม

ตลาดก็เลยไม่ยอมให้ซื้อขายครับ ( ราคาเปิด+SL+TP เท่ากัน )

แต่ขออนุญาต ขอความรู้เรื่อง Point เพิ่มเติมครับ ว่ามันทำงานยังไงครับ

ปรกติมันก็ไม่เป็นอะไรนะครับ ผมก็ใช้ตามที่หนังสือสอนมา

แต่คราวนี้ ผมมาเขียน แบบว่า ให้เข้าออเดอร์ คู่เงิน ที่ไม่มีอีเอ ติดตั้งอยู่น่ะครับ  ก็เลยต้องใช้ Makeinfo เข้าช่วย

รบกวนผู้รู้ด้วยนะครับ  ขอบคุณครับ

ปล.ตอนนี้ก็แก้เบื้องต้นไปก่อน โดยให้คู่เงินที่มี Point เท่ากัน สุ่มค่าที่ต้องการร่วมกันไปก่อนครับ เช่นพวก GJ EJ UJ เป็นต้นครับ
Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: tanakrit99 on มีนาคม 28, 2017, 08:15:20 pm
////////////////////////////////////////////////////////////
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 ควรมีค่ามากกว่าหรือเท่ากับค่าในรูปครับ
เดี่ยวผมงมหาด้วยว่าแก้ยังไง
Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: zidane19 on มีนาคม 28, 2017, 11:07:21 pm
โอ้ว ต้องขอขอบคุณ คุณ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

แต่ทว่า เจอวิธีแก้ของคุณเข้า (ไฮไลด์สีส้ม) คงต้องใช้แบบของคุณแล้วหล่ะครับ เพราะลดบรรทัดได้พอควรครับ

ขอบคุณมากๆ เลยนะครับ
Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: bird2000 on มีนาคม 29, 2017, 11:51:35 am
ลองดูตรง stoplevel ครับ MarketInfo(SymX,MODE_STOPLEVEL)

ถ้าตัวนี้มากกว่า SL หรือ TP ก็น่าจะเปิด order ไม่ได้นะ

หรือทดลองเปิด order แบบยังไม่ใช้ SL กับ TP ดูก่อน

ปล. ผมแค่ดูตัวอย่างนะไม่ได้ทดลอง code จริง ๆ
Title: Re: ปัญหา OrderSend ของ Symbol ที่ไม่ได้ถูก EA รันหรือติดตั้งอยู่ในขณะนั้น
Post by: zidane19 on มีนาคม 29, 2017, 10:19:26 pm
ขอบคุณ คุณ bird2000 มากๆ เลยครับ

ที่ให้ความรู้เพิ่มเติม

เรื่อง MarketInfo(SymX,MODE_STOPLEVEL);

ปัญหาของผมแก้ได้แล้วครับ มันเป็นกับ การใช้ Point ที่ไม่อ้าง ฟังก์ชั่น Marketinfo

เนื่องจากผมใช้ระบบ การเรียก คู่เงิน ที่อีเอ ไม่ได้รันอยู่น่ะครับ

ถ้าอ้างคู่เงิน ที่อีเอรันอยู่ ก็ใช้ Point ธรรมดาได้ครับ...